Fondamenti

WHERE o HAVING: dove posizionare il filtro?

WHERE definisce le righe di calcolo; HAVING decide quali gruppi calcolati rimangono visibili.

Team SQL.tn8min
Le righe vengono filtrate prima del raggruppamento, quindi i gruppi superano una seconda soglia

La condizione è su una linea o su un gruppo?

Uno stato o una data appartiene a una riga di origine: utilizzare WHERE. Dopo il raggruppamento esiste un totale, una media o un numero di ordini: utilizzare HAVING.

L'ordine ne modifica il significato. Escludere le righe cancellate prima di SUM non equivale a calcolare tutti gli stati e poi nascondere determinati gruppi.

I nomi, gli importi e i dati utilizzati in questo articolo sono fittizi e creati a scopo didattico.

La domanda è stata spiegata

Inizia definendo cosa dovrebbe rappresentare una riga del risultato. Questa decisione determina le colonne, i raggruppamenti e i controlli necessari.

L'esempio seguente isola il meccanismo principale. Eseguilo, osserva il risultato, quindi modifica una clausola alla volta per comprenderne l'effetto.

Clienti con almeno due ordini pagati
SELECT id_client, COUNT(*) AS commandes_payees
FROM commandes
WHERE statut = 'Pagato'
GROUP BY id_client
HAVING COUNT(*) >= 2;

Leggi il risultato come un analista

WHERE prepara solo ordini pagati. GROUP BY crea una riga per cliente, quindi HAVING mantiene volumi di almeno due.

Separa mentalmente questi passaggi e monitora il numero di record restituiti in ciascuno di essi quando la query diventa complessa.

  • Formulare il perimetro delle linee.
  • Imposta il livello di dettaglio per i gruppi.
  • Applica la soglia all'aggregazione.
  • Confrontare il totale complessivo con la somma dei gruppi.

Errori che distorcono l'analisi

Una query può essere valida senza rispondere correttamente alla domanda. Gli errori più costosi spesso sono silenziosi: perimetro sbagliato, linea moltiplicata o valore mancante interpretato come zero.

Prima di condividere il risultato, confrontalo con un piccolo campione calcolato manualmente e mantieni la definizione dell'ambito con la query.

  • Scrivere WHERE COUNT(*).
  • Filtrare importo >= soglia anziché SUM(importo) >= soglia.
  • Dimentica GROUP BY.
  • Confronta gruppi costruiti con perimetri diversi.

Mettiti in pratica

Esegui l'esercizio HAVING sul paniere medio, quindi modifica la soglia per osservare i gruppi mantenuti.

Il simulatore SQL di SQL.tn esegue solo query di lettura su dati fittizi nel tuo browser. Puoi provare più scritture e confrontare i risultati senza installare alcun software.

Metti in pratica questa guida.

Apri l’esercizio collegato, esegui la query e confronta il risultato atteso.

Inizia l’esercizio