sql-server - numero - sql contar registros agrupados
Contar el nĂºmero de registros devueltos por el grupo por (12)
¿Puedes ejecutar el siguiente código a continuación? Funcionó en Oracle.
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
¿Cómo cuento el número de registros devueltos por un grupo por consulta?
Por ejemplo:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Me da,
1
1
2
Necesito contar los registros anteriores para obtener 1 + 1 + 1 = 3.
¿Qué le parece usar una función de particionamiento COUNT OVER (PARTITION BY {column to group by}) en SQL Server?
Por ejemplo, si desea agrupar las ventas de productos por ID de artículo y desea un recuento de cada ID de artículo, simplemente use:
SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}
Si usa este enfoque, puede dejar GROUP BY fuera de la imagen, suponiendo que desea devolver toda la lista (ya que podría informar sobre bandas donde necesita saber el recuento completo de elementos que va a enganchar sin tener para mostrar todo el conjunto de datos, es decir, Reporting Services).
En PostgreSQL esto funciona para mí:
select count(count.counts)
from
(select count(*) as counts
from table
group by concept) as count;
Estaba tratando de lograr lo mismo sin subconsulta y pude obtener el resultado requerido de la siguiente manera
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
La solución más simple es usar una tabla derivada:
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
Otra solución es usar un Conde Distinct:
Select ...
, ( Select Count( Distinct column_1, column_2, column_3, column_4 )
From TempTable ) As CountOfItems
From TempTable
Group By column_1, column_2, column_3, column_4
Podrías hacerlo:
select sum(counts) total_records from (
select count(*) as counts
from temptable
group by column_1, column_2, column_3, column_4
) as tmp
Prueba esta consulta:
select top 1 TotalRows = count(*) over ()
from yourTable
group by column1, column2
Puede hacer ambas cosas en una consulta utilizando la cláusula OVER en otro COUNT
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
Qué tal si:
SELECT count(column_1)
FROM
(SELECT * FROM temptable
GROUP BY column_1, column_2, column_3, column_4) AS Records
Sé que es bastante tarde, pero nadie sugirió esto:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
Esto funciona al menos en Oracle: actualmente no tengo otras bases de datos para probarlo, y no estoy tan familiarizado con la sintaxis T-Sql y MySQL.
Además, no estoy del todo seguro de si es más eficiente en el analizador para hacerlo de esta manera, o si la solución de todos los demás de anidar la declaración seleccionada es mejor. Pero creo que este es más elegante desde una perspectiva de codificación.
Un CTE funcionó para mí:
with cte as (
select 1 col1
from temptable
group by column_1
)
select COUNT(col1)
from cte;
también puede obtener la consulta a continuación
select column_group_by,count(*) as Coulm_name_to_be_displayed from Table group by Column;
-- For example:
select city,count(*) AS Count from people group by city