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 chiarirne meglio l’utilizzo della group by: nel database sarà sicuramente presente una tabella in cui vengono archiviate le fatture. In questa tabella la chiave primaria sarà costituita probabilmente da una colonna IdFattura. Tramite le istruzioni Where e Join è possibile visualizzare soltanto le fatture che rispecchiano particolare requisiti, magari provenienti da più tabelle. Tuttavia molto spesso le attività di analisi dei dati non sono interessate ai singoli record, ma vogliono estrarre dai dati informazioni più generali, di più ampio respiro, in altre parole aggregate sulle dimensioni di analisi del business. 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”. 

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 guardandoli da più dimensioni differente.

 

Come scrivere una clausola Group by

La lingua italiana è molto vasta e uno stesso concetto può essere espresso in maniera diversa. Ad uno sviluppatore SQL basta sapere che ogni volta 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 contenente la particolare dimensione di analisi scelta (in questo caso per l’appunto 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 intendiamo 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. Inoltre è spiegato come utilizzare il costrutto Having per filtrare dei dati aggregati, a questo link trovi un ulteriore approfondimento. Fate molta attenziona a questa parte, una classica domanda da colloquio di lavoro è quella di spiegare la differenza tra Where e Having. A questo link trovate un approfondimento a riguardo.  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