Come contare il numero di record restituiti da un gruppo per query,
Ad esempio:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Mi da,
1
1
2
Devo contare i record sopra per ottenere 1 + 1 + 1 = 3.
Come contare il numero di record restituiti da un gruppo per query,
Ad esempio:
select count(*)
from temptable
group by column_1, column_2, column_3, column_4
Mi da,
1
1
2
Devo contare i record sopra per ottenere 1 + 1 + 1 = 3.
Risposte:
Puoi eseguire entrambe le operazioni in una query utilizzando la clausola OVER su un altro COUNT
select
count(*) RecordsPerGroup,
COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4
column_1, column_2, column_3, column_4
). Questo può o meno essere un effetto collaterale significativo, a seconda di come elaborate i risultati.
La soluzione più semplice è utilizzare una tabella derivata:
Select Count(*)
From (
Select ...
From TempTable
Group By column_1, column_2, column_3, column_4
) As Z
Un'altra soluzione è utilizzare un Count 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
So che è piuttosto tardi, ma nessuno ha suggerito questo:
select count ( distinct column_1, column_2, column_3, column_4)
from temptable
Questo funziona almeno in Oracle - Al momento non ho altri database su cui testarlo e non ho molta familiarità con la sintassi T-Sql e MySQL.
Inoltre, non sono del tutto sicuro se sia più efficiente nel parser farlo in questo modo, o se la soluzione di tutti gli altri di nidificare l'istruzione select sia migliore. Ma trovo che questo sia più elegante dal punto di vista della programmazione.
Stavo cercando di ottenere lo stesso senza subquery e sono stato in grado di ottenere il risultato richiesto come di seguito
SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
Potresti fare:
select sum(counts) total_records from (
select count(*) as counts
from temptable
group by column_1, column_2, column_3, column_4
) as tmp
Puoi eseguire il seguente codice qui sotto. Ha funzionato in Oracle.
SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4
puoi anche ottenere dalla query qui sotto
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
Prova questa query:
select top 1 TotalRows = count(*) over ()
from yourTable
group by column1, column2
select *
, concat(cast(cast((ThirdTable.Total_Records_in_Group * 100 / ThirdTable.Total_Records_in_baseTable) as DECIMAL(5,2)) as varchar), '%') PERCENTage
from
(
SELECT FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable, count(*) Total_Records_in_Group
FROM BaseTable FirstTable
JOIN (
SELECT FK1, count(*) AS Total_Records_in_baseTable
FROM BaseTable
GROUP BY FK1
) SecondTable
ON FirstTable.FirstField = SecondTable.FK1
GROUP BY FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable
ORDER BY FirstTable.FirstField, FirstTable.SecondField
) ThirdTable
Che ne dite di usare una funzione di partizionamento COUNT OVER (PARTITION BY {colonna per raggruppare per}) in SQL Server?
Ad esempio, se si desidera raggruppare le vendite dei prodotti per ItemID e si desidera un conteggio di ciascun ItemID distinto, utilizzare semplicemente:
SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}
Se usi questo approccio, puoi lasciare il GROUP BY fuori dall'immagine - supponendo che tu voglia restituire l'intero elenco (come potresti fare un report banding in cui devi conoscere l'intero conteggio degli elementi che stai per fasciare senza avere per visualizzare l'intero set di dati, ad esempio Reporting Services).
BandedItemCount
conterrà esattamente? Differisce tra le righe di output? Il richiedente sta cercando il numero di livelli di raggruppamento distinti.