Torna all'elenco degli articoli Articoli
Tempo di lettura: 7 minuti

Che cos'è il GROUP BY in SQL?

GROUP BY è una grande funzione SQL che consente di eseguire potenti calcoli su dati raggruppati. Volete imparare a ricavare potenti informazioni dai vostri dati? Volete sapere che cosa fa GROUP BY e quando dovreste usarlo? Se la risposta è sì, continuate a leggere. In questo articolo imparerete esattamente questo.

Perché avete bisogno di GROUP BY

Nel mondo digitalizzato di oggi, indipendentemente dal settore di attività, le tabelle dei database sono generalmente enormi, con milioni di record. Per conoscere questi dati, non è sufficiente sapere come usare le istruzioni SELECT. Una delle prime cose da imparare quando si ha a che fare con enormi quantità di dati è l'uso della costruzione SQL GROUP BY. Questa potente funzione consente di raggruppare i dati in base ad alcuni attributi comuni, dopodiché è possibile eseguire calcoli su ciascuno di questi gruppi separatamente.

Quando serve GROUP BY

Quindi, è possibile utilizzare GROUP BY quando si desidera raggruppare i record e poi eseguire alcuni calcoli su ciascun gruppo e visualizzare i risultati. La domanda successiva è: in quali situazioni o scenari aziendali ha senso utilizzare la clausola GROUP BY?

SQL GROUP BY è ampiamente utilizzato in diversi settori e aree aziendali. Ad esempio:

  • Nelle vendite, si può usare GROUP BY per calcolare il numero totale di prodotti venduti a livello di prodotto o di categoria.
  • Le risorse umane potrebbero chiedervi di calcolare lo stipendio medio per ogni reparto dell'azienda utilizzando una tabella che contiene informazioni sui dipendenti, i loro stipendi e i loro reparti.
  • Nel settore bancario, il numero totale di clienti attivi rispetto a quelli non attivi può essere calcolato utilizzando la costruzione GROUP BY.
  • Nella sanità pubblica o nella medicina, è possibile calcolare il numero totale di casi COVID confermati per ogni paese e provincia con GROUP BY.

Una cosa è certa: ci sono molti scenari aziendali diversi in cui GROUP BY è utile. Indipendentemente dal luogo in cui lavorate come analisti SQL, vi troverete sicuramente a utilizzare GROUP BY ogni giorno.

Ora è il momento di imparare a usare la clausola GROUP BY. Cominciamo con la sua sintassi.

Sintassi GROUP BY

La sintassi di GROUP BY è più facile da spiegare con un esempio, quindi iniziamo a dare un'occhiata alla tabella movies mostrata di seguito:

idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
3Sweet and LowdownWoody Allen1993
4Talk to HerPedro Almodovar2002
2Midnight in ParisWoody Allen2011
8The Skin I Live InPedro Almodovar2011

Come si può vedere, ogni film è rappresentato da un record nella tabella. Per ogni film, la tabella contiene informazioni sul regista e sull'anno di produzione.

Alcuni film sono stati realizzati dallo stesso regista. Se si desidera visualizzare il numero di film realizzati da ciascun regista, si può utilizzare GROUP BY in questo modo:

SELECT director,
      count(*) AS number_of_movies
FROM movies
GROUP BY director;

Ecco una breve spiegazione di ciò che accade in questa query:

  • Questa istruzione SQL raggruppa i record in base alla colonna director. La parola chiave GROUP BY è seguita dal nome della colonna per la quale i record sono raggruppati (nel nostro caso, la colonna è director).
  • La colonna di raggruppamento deve essere elencata dopo la parola chiave SELECT (cioè all'interno di SELECT). Ciò significa che i direttori saranno visualizzati nella schermata di output e che i calcoli specifici saranno eseguiti per ogni gruppo (per ogni direttore) separatamente.
  • Ci sono tre gruppi di record perché nella tabella dei film ci sono tre registi diversi (Alfred Hitchcock, Woody Allen e Pedro Almodovar).
  • La funzione COUNT(*) viene eseguita su ciascun gruppo. Conterà tutte le righe all'interno di ciascun gruppo.

La tabella risultante mostra il numero totale di film per ciascun regista:

directornumber_of_movies
Alfred Hitchcock1
Woody Allen2
Pedro Almodovar2

Si noti come le righe dei risultati siano collassate: ogni gruppo è visualizzato in una riga. Ecco perché la tabella risultante contiene tre righe invece di cinque (il numero di righe della tabella): ci sono tre gruppi.

Come funziona GROUP BY

Ora sapete cosa il motore SQL visualizzerà come risultato del nostro GROUP BY. Ma come funziona effettivamente GROUP BY? Guardate l'animazione qui sotto:

GRUPPO PER

Come si può vedere da questa animazione, il motore SQL raggruppa innanzitutto le righe in base a una chiave definita, nel nostro caso la colonna regista. I film di Alfred Hitchcock sono in un gruppo, quelli di Woody Allen in un altro e quelli di Pedro Almodovar in un terzo. Dopo il raggruppamento, viene eseguito un conteggio su ciascun gruppo separatamente e il risultato viene visualizzato. In questo caso, la funzione COUNT() conta il numero totale di film per ogni regista.

Forse vi siete imbattuti nella clausola SQL ORDER BY e non siete sicuri della differenza tra ordinare e raggruppare le righe. In tal caso, vi suggerisco di dare un'occhiata a Differenza tra GROUP BY e ORDER BY in parole semplici.

Calcoli multipli in un GROUP BY

Nell'esempio precedente abbiamo contato i record (film) di ciascun regista separatamente. Ci sono molte altre statistiche che si possono usare in una clausola GROUP BY. Ad esempio, invece di contare le singole righe, si può calcolare il valore medio per ogni gruppo usando la funzione AVG() oppure si possono calcolare i totali usando SUM(). Si possono anche usare le funzioni MIN() o MAX() per recuperare i valori più piccoli (min) o più grandi (max) di ogni gruppo. Queste funzioni vengono chiamate funzioni aggregate perché eseguono calcoli su gruppi di valori e restituiscono un unico valore come risultato.

Vediamo un rapido esempio di utilizzo di GROUP BY con le funzioni aggregate. In questa query è possibile visualizzare i primi/ultimi film realizzati da ciascun regista:

SELECT director,
      min(production_year) AS the_earliest_film_made,
      max(production_year) AS the_latest_film_made
FROM movies 
GROUP BY director;

Qui utilizziamo le funzioni MIN() e MAX() per recuperare le informazioni desiderate. Abbiamo usato due funzioni perché stiamo recuperando due statistiche diverse per ogni gruppo di record. Questa è un'altra buona cosa da sapere su GROUP BY: è possibile eseguire diversi calcoli in un'unica istruzione SQL.

Ecco il risultato:

directorthe_earliest_film_madethe_latest_film_made
Alfred Hitchcock19601960
Woody Allen19932011
Pedro Almodovar20022011

Si noti che i valori minimo e massimo di Alfred Hitchcock sono uguali. Questo perché nella nostra tabella c'è un solo film di Alfred Hitchcock; pertanto, MIN() e MAX() restituiscono lo stesso valore. Gli altri registi presenti nella movies hanno più film in portafoglio, quindi hanno valori diversi.

Non abbiamo spazio per approfondire le funzioni aggregate in questa sede; potete trovare una spiegazione dettagliata delle funzioni aggregate e del loro utilizzo con GROUP BY nel nostro articolo A Beginner's Guide to SQL Aggregate Functions.

GROUP BY con più colonne

Nell'esempio precedente, abbiamo visto che è possibile eseguire più di un calcolo in un'unica istruzione GROUP BY. Allo stesso modo, è possibile raggruppare le righe in base a più colonne. Ciò significa che ogni gruppo specifico nell'output è definito da più di un valore di colonna.

Supponiamo che la nostra movies abbia anche un attributo di genere per ogni film:

idtitledirectorproduction_yeargenre
1PsychoAlfred Hitchcock1960thriller
3Sweet and LowdownWoody Allen1993comedy/drama
4Talk to HerPedro Almodovar2002romance/drama
2Midnight in ParisWoody Allen2011comedy/drama
8The Skin I Live InPedro Almodovar2011thriller/drama

Invece di raggruppare le righe per regista, potremmo raggrupparle per regista e genere per calcolare il numero di film di ciascun regista in ciascun genere:

SELECT director,
      genre,
      count(*) as number_of_movies 
FROM movies
GROUP BY director, genre;

Ecco una breve spiegazione della query precedente:

  • All'interno del GROUP BY, abbiamo due colonne: regista e genere. Queste due colonne sono definite anche dopo la SELECT Ricordate, dovete elencare tutte le colonne del GROUP BY all'interno della SELECT.
  • In questo esempio, ogni gruppo è definito da un regista e da un genere. Ciò significa che distingueremo i film thriller/drammatici di Pedro Almodovar come un gruppo e i suoi film romantici/drammatici come un altro gruppo. Pertanto, nell'output avremo quattro righe (non tre):
directorgenrenumber_of_movies
Alfred Hitchcockthriller1
Woody Allencomedy/drama2
Pedro Almodovarromance/drama1
Pedro Almodovarthriller/drama1

th style="background-color:#37c591"

Bello, vero? A questo punto avrete capito che GROUP BY è una funzione SQL molto potente ed efficace. Se volete vedere altri esempi di GROUP BY, vi suggerisco l'articolo Esempi di GROUP BY in SQL. Qui troverete altri 5 esempi che vi aiuteranno a padroneggiare GROUP BY.

Approfondire la conoscenza di SQL GROUP BY

Spero che questi esempi vi abbiano mostrato quanto sia facile scrivere una clausola SQL GROUP BY. È molto utile nel lavoro di tutti i giorni, in quanto consente di ottenere potenti informazioni sui dati in poche righe di codice.

Ora è il momento di fare pratica. Vi suggerisco di iniziare con il corso SQL Basics su LearnSQL.it. Se avete già affrontato le nozioni fondamentali e volete affinare le vostre capacità, provate il corso SQL Practice Set. Ricordate che solo esercitandovi potrete migliorare le vostre conoscenze e avvicinarvi al titolo di esperto di SQL.