Espressione SQL GROUP BY

Le funzioni di aggregazione (ad esempio SUM) richiedono spesso l'aggiunta della clausola GROUP BY.

Clausola GROUP BY

La clausola GROUP BY viene utilizzata per combinare funzioni di aggregazione, raggruppando i risultati di una o più colonne.

Sintassi di SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Esempio di SQL GROUP BY

Possediamo la seguente tabella "Orders":

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

Ora, vogliamo trovare l'importo totale (totale degli ordini) per ogni cliente.

Vogliamo utilizzare la clausola GROUP BY per raggruppare i clienti.

Usiamo la seguente istruzione SQL:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

Il risultato set è simile a questo:

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

Fantastico, vero?

Vediamo cosa succede se saltiamo la clausola GROUP BY:

SELECT Customer,SUM(OrderPrice) FROM Orders

Il risultato set è simile a questo:

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Il risultato non è quello che ci aspettavamo.

Allora perché non possiamo usare la seguente istruzione SELECT? Ecco la spiegazione: l'istruzione SELECT specifica due colonne (Customer e SUM(OrderPrice)). "SUM(OrderPrice)" restituisce un singolo valore (il totale della colonna "OrderPrice"), mentre "Customer" restituisce 6 valori (ciascun valore corrisponde a ogni riga nella tabella "Orders"). Pertanto, non otteniamo il risultato corretto. Tuttavia, come avete visto, la clausola GROUP BY risolve questo problema.

GROUP BY una colonna superiore

Possiamo anche applicare la clausola GROUP BY a una colonna superiore, come nel seguente esempio:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate