9th Dec 2022 Tempo di lettura: 7 minuti Che cos'è il GROUP BY in SQL? Marija Ilic sql imparare sql group by Indice Perché avete bisogno di GROUP BY Quando serve GROUP BY Sintassi GROUP BY Come funziona GROUP BY Calcoli multipli in un GROUP BY GROUP BY con più colonne Approfondire la conoscenza di SQL GROUP BY 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: 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. Tags: sql imparare sql group by