GROUP BY in Sql
Nel linguaggio Sql la clausola Group by divide una tabella in gruppi in base al valore di uno o più attributi. Si utilizza nelle interrogazioni.
SELECT ...
GROUP BY attributo
La clausola GROUP BY va indicata dopo FROM o WHERE se presente.
Se la clausola GROUP BY ha più attributi in sequenza, vanno separati con una virgola.
SELECT ...
GROUP BY att1, att2
L'ordine degli attributi determina la gerarchia del raggruppamento nella tabella Sql.
Esempio. La clausola crea dei gruppi più grandi con il primo attributo della lista (att1). Questi gruppi sono a loro volta divisi in sottogruppi più piccoli con il secondo attributo (att2).
A cosa serve GROUP BY?
Mi permette di applicare gli operatori aggregati (sum, min, max, avg, count) ai sottoinsiemi (gruppi) anziché alla tabella per intero.
Per applicare una condizione sui risultati aggregati posso aggiungere alla GROUP BY la clausola HAVING.
Attenzione. Nell'argomento della SELECT posso usare soltanto gli attributi usati nella clausola GROUP BY e gli operatori aggregati. Ad esempio, SELECT città FROM tabella GROUP BY regione è sbagliata. Viceversa è corretta la SELECT regione FROM tabella GROUP BY regione.
Un esempio pratico
Ho la tabella Studenti
Voglio calcolare la media dell'età degli studenti per ogni città di provenienza.
Scrivo la selezione usando l'operatore aggregato AVG(Età) per calcolare la media e la clausola GROUP BY Città.
SELECT Città, AVG(Età)
FROM Studenti
GROUP BY Città
Il risultato dell'interrogazione è la media delle età per ogni città.
Esempio 2
Per modificare l'ordine alfabetico delle città basta aggiungere alla SELECT la clausola ORDER BY Città.
SELECT Città, AVG(Età)
FROM Studenti
GROUP BY Città
ORDER BY Città DESC
L'interrogazione visualizza i risultati in ordine inverso.
Esempio 2
Per includere una condizione di selezione aggiungo la clausola WHERE dopo FROM.
SELECT Città, AVG(Età)
FROM Studenti
WHERE Città <> 'Napoli'
GROUP BY Città
L'interrogazione raggruppa i risultati dopo la selezione, escludendo le tuple di Napoli.
Come funziona GROUP BY
L'interrogazione crea la tabella secondo le condizioni della SELECT, proiettando gli attributi.
Poi raggruppa la tabella in base ai valori dell'attributo indicato come argomento nella clausola Group By.
Infine, calcola gli operatori aggregati della Select nei singoli gruppi.
L'interrogazione restituisce i valori aggregati dei gruppi.
E così via