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.