Group by con il linguaggio SQL

Group by SQL: come aggregare i dati di una tabella

In questo articolo parleremo dell’operatore GROUP BY del linguaggio SQL, uno strumento fondamentale che ci permetterà di analizzare i dati presenti all’interno di un database sotto molteplici punti di vista, tramite aggregazioni e semplici calcoli matematici.

Facciamo un esempio per chiarire meglio l’utilizzo della group by. Nel nostro database sarà sicuramente presente una tabella in cui vengono archiviate le fatture. Tramite le istruzioni Where e Join è possibile visualizzare le fatture che rispecchiano particolari requisiti, magari combinando i dati di più tabelle. Tuttavia molto spesso le attività di analisi dei dati non saranno interessate all’elenco di singole fatture, ma vogliono estrarre informazioni più generali, di più ampio respiro, aggregate sulle dimensioni di analisi del particolare business che il database descrive. Ad esempio potremmo essere interessati a rispondere a domande come “calcolare l’importo delle fatture diviso per regioni di provenienza del cliente“, oppure “calcolare l’importo delle fatture al variare del mese di vendita“. Il soggetto della richiesta è spostato dunque dalla fattura ad una grandezza diversa, come la regione, il mese o un’altra colonna descrittiva.

Tutti i software e i linguaggi di programmazione che si interfacciano con i dati mettono a disposizione funzionalità per rispondere a questo genere di domande. Ad esempio su Microsoft Excel potremmo creare una tabella Pivot (a questo link trovi un approfondimento in merito). L’SQL non è da meno: tramite la parola chiave GROUP BY e alcune funzioni di aggregazione possiamo scrivere del codice semplice, efficace, di facile manutenzione e veloce per analizzare i dati da più dimensioni differenti.

 

Come scrivere una clausola Group by

La lingua italiana è molto vasta e uno stesso concetto può essere espresso in maniera diversa. Uno sviluppatore SQL che deve “aggregare i dati per regione”, “estrarre i dati divisi per regione”, “raggruppare per regione”, “riportare l’output per ogni regione” dovrà scrivere una query contenente l’istruzione Group By seguita dalla colonna corrispondente alla dimensione di analisi richiesta (in questo caso la regione).

A questo punto può seguire quella che a me piace chiamare nei miei corsi “la regola d’oro” che risulta applicabile in una percentuale di casi molto vicina al cento per cento:

ciò che scriviamo dopo la group by, deve essere copiato e incollato nella select. A questo punto, nella select posso aggiungere solamente funzioni di aggregazione applicate ad altre colonne

Con funzioni di aggregazioni intendo semplicemente una di queste cinque funzioni: count, sum, avg, min o max.

Facciamo un esempio concreto. Dobbiamo riportare l’importo complessivo delle fatture per ogni anno. Partiamo scrivendo la struttura classica di una query:

SELECT
FROM
WHERE
GROUP BY

Iniziamo valorizzando la clausola From con la tabella contenente le informazioni richieste (immaginiamo si chiami Fatture) ed eliminiamo la clausola Where in quanto non è richiesto nessun filtro sui dati. Scriveremo dunque

SELECT
FROM   Fatture
GROUP BY

Il fatto che la domanda ci chieda i dati divisi per anno, o analogamente per ogni anno, aggregati per anno, divisi per anno, ci deve immediatamente portare a scrivere questa informazione nella clausola Group by:

SELECT
FROM   Fatture
GROUP BY Year(DataFattura)

A questo punto applico la regola d’oro: faccio in primo luogo copia e incolla nella Select di quanto scritto nella Group by:

SELECT  Year(DataFattura)
FROM    Fatture
GROUP BY Year(DataFattura)

e valuto la possibilità di aggiungere solo delle funzioni di aggregazioni. In questo caso, per rispondere alla richiesta, aggiungo la somma (SUM) della colonna Importo.

SELECT  Year(DataFattura), SUM(Importo)
FROM    Fatture
GROUP BY Year(DataFattura)

A patto di fornire un alias alle mie colonne nella select, la query è terminata!

 

L’istruzione Having per filtrare i dati dopo un raggruppamento

In questa mia presentazione da SlideShare troverete altri esempi su come scrivere correttamente query che raggruppano i dati. Inoltre è spiegato come utilizzare il costrutto Having per fare dei filtri post aggregazione. A questo link https://www.w3schools.com/sql/sql_having.asp trovi un ulteriore approfondimento. Una classica domanda da colloquio di lavoro è quella di spiegare la differenza tra Where e Having. Qui trovi un approfondimento in merito.  Come al solito, per la visione della presentazione, consigliamo la visualizzazione a schermo intero.

 

Articoli correlati

In questo articolo parliamo di un’altra operazione fondamentale dell’SQL: la Join.

Torna su