Un componente importante per gli analisti per riassumere i dati come vendite, profitti, costi e salari. Il riassunto dei dati è molto utile per l’analista per creare una visualizzazione, concludere i risultati e scrivere un rapporto. In SQL, la clausola GROUP BY è uno degli strumenti per riassumere o aggregare le serie di dati. Per esempio, sommare le vendite giornaliere e combinare in un singolo trimestre e mostrarlo al senior management. Allo stesso modo, se si vuole contare quanti dipendenti in ogni dipartimento dell’azienda. Raggruppa i database sulla base di una o più colonne e aggrega i risultati.
Dopo aver raggruppato i dati, è possibile filtrare il record raggruppato utilizzando la clausola HAVING. La clausola HAVING restituisce i record raggruppati che corrispondono alla condizione data. Potete anche ordinare i record raggruppati usando ORDER BY. ORDER BY usato dopo GROUP BY sulla colonna aggregata.
In questo tutorial, imparerete la clausola GROUP BY in dettaglio con esempi rilevanti. Ecco l’elenco degli argomenti che imparerete in questo tutorial:
- Clausola GROUP BY
- Clausola Having
- Funzioni aggregate
- Confronto tra la clausola Having e Where in SQL
- GROUP BY con l’esempio JOIN
- Confronto GROUP BY con altre clausole
- Hands-on Practice Assignment
- Conclusion
Group By Clause
La clausola GROUP BY viene utilizzata in SQL con l’istruzione SELECT per organizzare dati simili in gruppi. Combina i record multipli in una o più colonne usando alcune funzioni. Generalmente, queste funzioni sono funzioni aggregate come min(), max(), avg(), count(), e sum() per combinare in colonne singole o multiple. Utilizza la strategia split-apply-combine per l’analisi dei dati.
- Nel
split phase
, divide i gruppi con i suoi valori. - Nel
apply phase
, applica la funzione aggregata e genera un singolo valore. - Nel
combiner phase
, combina i gruppi con valori singoli in un unico valore.
Fonte dell’immagine
Punti da ricordare:
- La clausola GROUP BY viene utilizzata con la dichiarazione SELECT.
- GROUP BY aggrega i risultati sulla base della colonna selezionata: COUNT, MAX, MIN, SUM, AVG, ecc.
- GROUP BY restituisce solo un risultato per gruppo di dati.
- La clausola GROUP BY segue sempre la clausola WHERE.
- La clausola GROUP BY precede sempre la clausola ORDER BY(http://slideplayer.com/slide/15440670/).
Nell’esempio precedente, la tabella è raggruppata in base alla colonna DeptID e lo stipendio è aggregato per reparto.
Clausola Having
Clausola Having utilizzata in SQL come clausola condizionale con la clausola GROUP BY. Questa clausola condizionale restituisce le righe in cui i risultati della funzione aggregata corrispondono solo alle condizioni date. È stata aggiunta nell’SQL perché la clausola WHERE non può essere combinata con i risultati aggregati, quindi ha uno scopo diverso. Lo scopo principale della clausola WHERE è quello di trattare i record non aggregati o individuali.
- La clausola HAVING viene sempre utilizzata in combinazione con la clausola GROUP BY.
- La clausola HAVING limita i dati sui record del gruppo piuttosto che sui record individuali.
- WERE e HAVING possono essere usati in una singola query.
Nell’esempio precedente, la tabella è raggruppata in base alla colonna DeptID e queste righe raggruppate sono filtrate utilizzando la clausola HAVING con la condizione AVG(Salary) > 3000.
Funzioni aggregate
Funzioni aggregate usate per combinare il risultato di un gruppo in uno solo come COUNT, MAX, MIN, AVG, SUM, STDDEV, e VARIANCE. Queste funzioni sono anche conosciute come funzioni a righe multiple.
-
SUM()
: Restituisce la somma o il totale di ogni gruppo. -
COUNT()
: Restituisce il numero di righe di ogni gruppo. -
AVG()
: Restituisce la media e la media di ogni gruppo. -
MIN()
: Restituisce il valore minimo di ogni gruppo. -
MAX()
: Restituisce il valore minimo di ogni gruppo.
Compara Having e Where Clause in SQL
- In alcuni casi, è necessario filtrare i singoli record. In questi casi, si può usare la clausola WHERE, mentre in altri casi è necessario filtrare i gruppi con una condizione specifica. In questi casi, si può usare la clausola HAVING.
- La clausola WHERE filtra i record tupla per tupla mentre la clausola HAVING filtra l’intero gruppo.
- Una query può avere entrambe le clausole (WHERE e HAVING).
- La clausola WHERE applicata per prima e poi la clausola Having.
- La clausola WHERE limita i record prima della clausola GROUP BY, mentre la clausola HAVING limita i gruppi dopo che la clausola GROUP BY è stata eseguita.
- La clausola WHERE può essere utilizzata con SELECT, UPDATE, DELETE, e INSERT, mentre HAVING può essere utilizzata solo con la dichiarazione SELECT.
Image Source
GROUP BY With JOIN Example
Il database relazionale normalizzato scompone la tabella complessa in piccole tabelle, che aiuta ad eliminare la ridondanza dei dati, l’incoerenza e ad assicurare che non ci sia perdita di informazioni. Le tabelle normalizzate richiedono l’unione dei dati di più tabelle.
Nell’esempio precedente, Employee e Department sono uniti usando la colonna comune DeptID.
Nell’esempio precedente, JOIN e GROUP BY entrambe le clausole usate insieme in una singola query. Dopo aver unito entrambe le tabelle (Employee e Department), la tabella unita viene raggruppata per Department name.
GROUP BY Comparazione con altre clausole
Confronto GROUP BY e DISTINCT
DISTINCT restituisce i valori unici presenti nella colonna mentre GROUP BY restituisce elementi unici/distinti con il risultato aggregato della colonna. Nell’esempio seguente potete vedere i valori DISTINCT nella tabella dept
.
Confronto GROUP BY e ORDER BY
ORDER BY restituisce gli elementi ordinati in ordine crescente e decrescente mentre GROUP BY restituisce gli elementi unici con la colonna risultato aggregato. Nell’esempio seguente, puoi vedere l’ORDER BY o la tabella degli stipendi ordinata.
Compito pratico
Nome tabella: Libri
Colonne: ISBN, Titolo, Data di pubblicazione, Prezzo, Editore
Scrivi le query SQL per le seguenti dichiarazioni e condividi le tue risposte nei commenti:
- Determina quanti libri ci sono in ogni categoria.
- Determina quanti libri ci sono nella categoria Management.
- Determina il prezzo medio di ogni categoria.
- Elenca il prezzo del libro meno caro di ogni categoria.
Fonte: Questo compito è ispirato dal libro “Oracle 11g SQL” di John Casteel.
Conclusione
Congratulazioni, sei arrivato alla fine di questo tutorial!
In questo tutorial, hai coperto molti dettagli sulla clausola GROUP BY e HAVING. Hai imparato cosa sono le clausole GROUP BY e HAVING con esempi, il confronto tra la clausola HAVING e WHERE in SQL, GROUP BY con JOIN, e il confronto GROUP BY con DISTINCT e ORDER BY. Nell’ultima sezione, hai un compito pratico per valutare le tue conoscenze.
Spero che ora tu possa utilizzare il concetto di clausola GROUP BY e HAVING per analizzare i tuoi set di dati. Grazie per aver letto questo tutorial!
Se sei interessato ad imparare di più su SQL, segui il corso intermedio di DataCamp su SQL.