Salta ai contenuti

GROUP BY

GROUP BY serve quando non vuoi guardare le righe una per una, ma vuoi raggrupparle.

Immagina una pila di schede clienti. Invece di leggerle in ordine, le dividi per città: Roma da una parte, Milano da un’altra, Torino da un’altra ancora.

SQL fa la stessa cosa con GROUP BY.

SELECT citta, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY citta;

Questa query dice:

“Raggruppa i clienti per città e conta quanti clienti ci sono in ogni città.”

Partiamo da questi dati:

nomecitta
LucaRoma
MartaMilano
SaraRoma

La query:

SELECT citta, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY citta;

produce:

cittanumero_clienti
Milano1
Roma2

SQL crea un gruppo per ogni città. Poi COUNT(*) conta quante righe ci sono in ciascun gruppo.

GROUP BY da solo crea i gruppi. Le funzioni aggregate fanno i calcoli dentro quei gruppi.

Per esempio:

  • COUNT(*) conta quante righe ci sono nel gruppo.
  • SUM(totale) somma i totali del gruppo.
  • AVG(prezzo) calcola la media del gruppo.

Per questo GROUP BY è così usato nei report.

Quando usi GROUP BY, nel SELECT metti di solito:

  • la colonna con cui stai raggruppando
  • una o più funzioni aggregate

Questa query è chiara:

SELECT citta, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY citta;

Questa invece crea confusione:

SELECT citta, nome, COUNT(*)
FROM clienti
GROUP BY citta;

Il problema è nome. Se a Roma ci sono Luca e Sara, quale nome dovrebbe mostrare SQL per il gruppo “Roma”?

Quando raggruppi, stai lasciando il dettaglio delle singole righe. Per questo devi mostrare il gruppo e i calcoli sul gruppo.

Puoi anche raggruppare usando più colonne:

SELECT citta, stato, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY citta, stato;

Qui SQL crea un gruppo per ogni combinazione di citta e stato.

È come dividere prima le schede per città e poi, dentro ogni città, separarle per stato.

  • GROUP BY raggruppa righe con lo stesso valore.
  • Si usa spesso con COUNT(), SUM(), AVG(), MIN() e MAX().
  • Nel SELECT mostri le colonne di raggruppamento e i calcoli aggregati.
  • Puoi raggruppare anche per più colonne.