Database
 sql >> Database >  >> RDS >> Database

Come filtrare i record con la funzione di aggregazione COUNT

Problema:

Vuoi trovare gruppi di righe con un numero specifico di voci in un gruppo.

Esempio:

Il nostro database ha una tabella denominata product con i dati nelle seguenti colonne:id , name e category .

id categoria
1 divano mobili
2 guanti abbigliamento
3 Maglietta abbigliamento
4 sedia mobili
5 scrivania mobili
6 guarda elettronica
7 poltrona mobili
8 gonna abbigliamento
9 ricevitore radio elettronica

Troviamo la categoria di prodotti con più di due voci.

Soluzione:

SELECT category, COUNT(id)
FROM product
GROUP BY category
HAVING COUNT(id)>2;

Ecco i risultati:

categoria conta
mobili 4
abbigliamento 3

Discussione:

Per filtrare i record in base al numero specificato di righe nel gruppo, utilizzare la clausola HAVING. Filtra le righe utilizzando in una funzione di aggregazione delle condizioni come COUNT. Innanzitutto, in SELECT, usa il nome di una o più colonne per raggruppare le righe (questa è una categoria nel nostro esempio), quindi posiziona la funzione di aggregazione COUNT, che calcola il numero di record in ciascun gruppo. Per contare il numero di righe, usa la colonna id che memorizza valori univoci (nel nostro esempio usiamo COUNT(id) ). Quindi, usa la clausola GROUP BY per raggruppare i record in base alle colonne (il GROUP BY categoria sopra). Dopo aver utilizzato GROUP BY per filtrare i record con funzioni aggregate come COUNT, utilizzare la clausola HAVING. Viene sempre utilizzato dopo la clausola GROUP BY. In HAVING, utilizziamo una condizione per confrontare un valore con uno restituito dalla funzione di aggregazione. Nell'esempio, confrontiamo se COUNT(id) restituisce un valore maggiore di due. Se true, la categoria viene restituita con il conteggio dei prodotti.