Passare dal dettaglio all'indicatore
Una tabella degli ordini contiene in genere una riga per transaction. Una dashboard prevede invece una riga per città, per categoria o per mese, accompagnata da indicatori come fatturato e paniere medio.
GROUP BY modifica il livello di dettaglio del risultato. Tutte le righe che condividono lo stesso valore vengono raggruppate prima di calcolare le funzioni di aggregazione.
COUNT, SUM e AVG rispondono a tre domande diverse
COUNT conta, SUM aggiunge e AVG calcola una media. Queste funzioni comprimono più righe in un valore sintetico.
In un report sulle vendite puoi contare gli ordini, sommarne l'importo e calcolare il valore medio degli ordini nella stessa query.
COUNT(*)conta le righe nel gruppo.COUNT(colonne)ignora i valoriNULLin questa colonna.SUM(montant)aggiunge gli importi diversi daNULL.AVG(montant)calcola la loro media.
SELECT
COUNT(*) AS nombre_commandes,
SUM(montant) AS chiffre_affaires,
ROUND(AVG(montant), 2) AS panier_moyen
FROM commandes;GROUP BY crea una riga per gruppo
Per ottenere una riga per città, aggiungi ville al risultato e la clausola GROUP BY. Ogni aggregazione viene poi calcolata separatamente per Tunisi, Sfax e le altre città presenti.
Come regola pratica, qualsiasi colonna visualizzata in SELECT che non è aggregata dovrebbe apparire in GROUP BY.
SELECT
ville,
COUNT(*) AS nombre_clients
FROM clients
GROUP BY ville
ORDER BY nombre_clients DESC;WHERE filtra le righe prima del calcolo
WHERE rimuove le righe prima di formare gruppi. Per creare i KPI per l'anno 2026, filtra gli ordini in base alla data prima di eseguire GROUP BY.
Questa distinzione è importante: le linee escluse da WHERE non partecipano al conteggio, né alla somma, né alla media.
SELECT
id_client,
SUM(montant) AS chiffre_affaires
FROM commandes
WHERE date_commande >= DATE '2026-01-01'
AND date_commande < DATE '2027-01-01'
GROUP BY id_client;HAVING filtra i gruppi dopo il calcolo
HAVING si verifica dopo l'aggregazione. Permette ad esempio di mantenere solo le città con almeno cinque ordini o un fatturato superiore ad una soglia.
Utilizzare WHERE per una condizione su una riga originale e HAVING per una condizione su un gruppo o un'aggregazione.
SELECT
id_client,
COUNT(*) AS nombre_commandes
FROM commandes
GROUP BY id_client
HAVING COUNT(*) >= 5
ORDER BY nombre_commandes DESC;Assemblare una query KPI completa
Per analizzare le vendite per città, è necessario prima collegare gli ordini ai clienti, filtrare il periodo, raggruppare per città quindi filtrare i gruppi non rappresentativi.
L'alias chiffre_affaires può essere riutilizzato in ORDER BY con il simulatore del sito. La clausola HAVING mantiene l'espressione di aggregazione completa per rimanere esplicita.
SELECT
c.ville,
COUNT(co.id_commande) AS nombre_commandes,
SUM(co.montant) AS chiffre_affaires,
ROUND(AVG(co.montant), 2) AS panier_moyen
FROM clients AS c
INNER JOIN commandes AS co
ON c.id_client = co.id_client
WHERE co.date_commande >= DATE '2026-01-01'
AND co.date_commande < DATE '2027-01-01'
GROUP BY c.ville
HAVING COUNT(co.id_commande) >= 5
ORDER BY chiffre_affaires DESC;Errori che distorcono un KPI
La corretta aggregazione dipende tanto dal livello di dettaglio quanto dalla formula. Prima di pubblicare un indicatore, controlla cosa rappresenta esattamente ciascuna riga del risultato.
- Mostra una colonna non aggregata senza aggiungerla a
GROUP BY. - Utilizzare
WHERE COUNT(*) > 5invece diHAVING. - Contare dopo uno join che ha moltiplicato le linee.
- Dimentica che
COUNT(colonne)ignora i valoriNULL. - Mescola periodi diversi nello stesso indicatore.
La tua lista di controllo prima di condividere il risultato
Imposta il livello previsto (una riga per città, cliente o mese), quindi scegli le aggregazioni. Applicare il filtro del periodo con WHERE, la soglia aziendale con HAVING e un ordinamento leggibile con ORDER BY.
Infine, controlla manualmente alcuni gruppi e documenta la definizione dei KPI. Una query breve ma ambigua resta meno utile di un calcolo esplicito e riproducibile.
Trova il tuo punto di partenza.
Rispondi a dieci domande e ricevi un consiglio didattico adatto.
