Espressione SQL GROUP BY
- Pagina precedente sum() SQL
- Pagina successiva HAVING SQL
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
- Pagina precedente sum() SQL
- Pagina successiva HAVING SQL