SQL GROUP BY: raggruppare dati che hanno valori uguali
SQL GROUP BY è il comando ideale se desideri raggruppare dati con valori identici. Questa istruzione è ampiamente utilizzata in combinazione con funzioni di aggregazione.
Cos’è SQL GROUP BY?
Nello Structured Query Language SQL GROUP BY è un’istruzione che viene usata per raggruppare righe con valori identici. Viene solitamente utilizzata insieme al comando SQL SELECT
e usa la clausola WHERE per filtrare le righe prima che vengano raggruppate. Spesso, SQL GROUP BY si usa in combinazione con funzioni come SQL AVG(), SQL COUNT(), MAX()
, MIN()
o SUM()
. In questo modo è possibile eseguire calcoli e visualizzare i risultati all’interno della tabella. È particolarmente utile quando si desidera determinare una sequenza o mettere in relazione i valori tra loro.
- Traffico illimitato e fino a 1 Gbit/s di larghezza di banda
- Storage SSD NVMe veloce
- Plesk Web Host Edition incluso
Sintassi e funzionamento
La sintassi di base di SQL GROUP BY è la seguente:
SELECT colonna1, colonna2, colonna3, …
FROM nome_della_tabella
GROUP BY colonna1, colonna2, colonna3, …;
sqlQuesto comando viene più spesso eseguito in concomitanza con la clausola WHERE
, che consente di porre determinate condizioni. In questo caso il codice si scrive così:
SELECT colonna1, colonna2, colonna3, …
FROM nome_della_tabella
WHERE condizione
GROUP BY colonna1, colonna2, colonna3, …
ORDER BY colonna1, colonna2, colonna3, …;
sqlEsempio di utilizzo con COUNT()
Per mostrare come funziona l’istruzione SQL GROUP BY, creiamo una tabella molto semplice chiamata “elenco clienti”. Questa tabella include colonne per il numero cliente, il nome, la città e il numero di articoli acquistati:
Numero cliente | Nome | Città | Articoli |
---|---|---|---|
1427 | Rossi | Roma | 13 |
1377 | Bianchi | Milano | 9 |
1212 | Ferrari | Milano | 15 |
1431 | Costa | Firenze | 22 |
1118 | Russo | Roma | 10 |
Ora possiamo usare SQL GROUP BY in combinazione con la funzione COUNT()
, ad esempio per creare un elenco di quanti clienti provengono da una determinata città. Il codice si scrive così:
SELECT Città, COUNT(*) AS Quantità
FROM Elenco_clienti
GROUP BY Città;
sqlIl risultato è questa nuova tabella:
Città | Quantità |
---|---|
Firenze | 1 |
Roma | 2 ] |
Milano | 2 |
Quindi, per poter visualizzare i risultati come “Quantità” usiamo gli alias SQL.
L’istruzione in combinazione con SUM()
Nel prossimo esempio usiamo SQL GROUP BY in combinazione con SUM()
per determinare e visualizzare quanti articoli sono stati ordinati da Milano. Per farlo usiamo questo codice:
SELECT Città, SUM(Articoli) AS Totale
FROM Elenco_clienti
WHERE Città = 'Milano'
GROUP BY Città;
sqlIl risultato è il seguente:
Città | Totale |
---|---|
Milano | 24 |
Uso in combinazione con ORDER BY
Il comando SQL GROUP BY può essere usato anche in combinazione con ORDER BY
. In questo caso organizziamo la tabella ordinandola per città e cliente in base al numero massimo di articoli acquistati, partendo dalla località in cui un cliente ha effettuato il maggior numero di ordini. Utilizziamo SQL GROUP BY in combinazione con la funzione MAX()
e ORDER BY
:
SELECT Città, MAX(Articoli) AS Maggiore
FROM Elenco_clienti
GROUP BY Città ORDER BY Maggiore DESC;
sqlL’output si legge così:
Città | Maggiore |
---|---|
Firenze | 22 |
Milano | 15 |
Roma | 13 |
Uso in combinazione con la clausola HAVING
È possibile integrare SQL GROUP BY anche con SQL HAVING. Nell’esempio seguente selezioniamo dalla lista solo i clienti con un numero cliente più piccolo di 1.300. Successivamente, ordiniamo le persone rimanenti in base al numero crescente di articoli ordinati. Questo il codice corrispondente:
SELECT Città, Numero cliente, MIN(Articoli) AS Minore
FROM Elenco_clienti
GROUP BY Città, Numero cliente HAVING Numero cliente > 1300;
sqlCosì facendo si ottiene la tabella con il nuovo output:
Città | Numero cliente | Minore |
---|---|---|
Milano | 1377 | 9 |
Roma | 1427 | 13 |
Firenze | 1431 | 22 |
Alternative a SQL GROUP BY
Il comando PARTITION BY
è un’alternativa molto usata a SQL GROUP BY. La differenza sta nel fatto che in questo caso si mantengono e sono visualizzati anche tutti i valori originari. In questo caso, molte delle funzioni aggregate menzionate in precedenza funzionano anche senza SQL GROUP BY.
Una banca dati come vuoi tu: grazie all’[hosting SQL server](https://www.ionos.it/cloud/sql-server-hosting server-hosting “Hosting SQL di IONOS”) di IONOS non puoi scegliere solo fra MSSQL, MySQL o MariaDB, ma approfitti anche di ottime prestazioni, sicurezza eccellente e consulenza specializzata.