GROUP BY e HAVING
Per ottenere informazioni più approfondite e organizzare meglio i dati all'interno di un database, SQL introduce le potenti clausole GROUP BY e HAVING.
Questi strumenti consentono di trasformare i dati non elaborati in riepiloghi significativi classificando le righe e applicando funzioni di aggregazione, semplificando l'analisi delle tendenze, l'identificazione dei modelli o la generazione di report personalizzati per categorie specifiche.
GROUP BY
Per analizzare i dati per categoria o gruppo, SQL fornisce la GROUP BY clausola . Questa clausola classifica le righe in base ai valori nelle colonne specificate, suddividendo in modo efficace i dati in subset.
La vera potenza di GROUP BY viene rivelata quando viene usata con funzioni di aggregazione. Funzioni di aggregazione, ad esempio COUNT(), SUM()AVG(),MIN() ed eseguono MAX() calcoli su questi gruppi, consentendo di generare statistiche di riepilogo per ogni categoria.
Ad esempio, è possibile usare GROUP BY per calcolare: -total vendite SUM() per ogni categoria di prodotti, -average prezzo AVG() di prodotti di ogni fornitore, -number di clienti COUNT() in ogni città.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;
Questa query recupera il prezzo medio dei prodotti all'interno di ogni categoria raggruppando le righe della tabella sales.products in base al relativo category_id. Applicando la funzione AVG() alla colonna price, la query calcola il valore medio dei prezzi per tutti i prodotti in ogni gruppo distinto category_id.
GROUP BY la clausola non deve essere sempre associata alle funzioni di aggregazione. Sebbene sia comunemente usato insieme alle funzioni di aggregazione per eseguire calcoli sui dati raggruppati, GROUP BY può anche essere usato da solo per organizzare i dati in gruppi per altri scopi, ad esempio il recupero di combinazioni distinte di colonne.
SELECT category_id
FROM sales.products
GROUP BY category_id;
Questa query raggruppa le righe per category_id senza eseguire alcuna aggregazione, elencando semplicemente ogni elemento distintivo category_id presente nella tabella sales.products.
HAVING
In SQL la WHERE clausola non può essere usata per filtrare i risultati delle funzioni di aggregazione.
Per filtrare i gruppi creati dalla clausola in base ai risultati della GROUP BY funzione di aggregazione, usare la HAVING clausola .
Si pensi a HAVING una WHERE clausola per i gruppi: consente di applicare condizioni ai dati riepilogati prodotti dalle funzioni di aggregazione, consentendo di perfezionare l'analisi per concentrarsi sui gruppi pertinenti.
SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;
Questa query calcola la media price dei prodotti all'interno di ogni categoria raggruppando le righe della tabella sales.products in base al relativo category_id. Filtra quindi i risultati in modo da includere solo le categorie in cui la media price supera 30 usando la HAVING clausola .