Sobes.tech
Junior

Qual è la differenza tra le istruzioni WHERE e HAVING in SQL?

sobes.tech AI

Risposta dell'AI

WHERE filtra le righe prima di raggruppare. HAVING filtra i gruppi creati con GROUP BY, dopo il raggruppamento.

WHERE:

  • Si applica alle righe singole.
  • Non può usare funzioni di aggregazione (COUNT, SUM, AVG, MIN, MAX).
  • Viene eseguito prima di GROUP BY, HAVING e SELECT.

HAVING:

  • Si applica ai gruppi di righe.
  • Può usare funzioni di aggregazione.
  • Viene eseguito dopo WHERE e GROUP BY, ma prima di SELECT.

Esempio:

Trova clienti della città 'Mosca' (dove WHERE) con un importo totale degli ordini superiore a 1000 (dove HAVING).

SELECT customer_id, SUM(order_amount)  -- Seleziona ID cliente e somma degli ordini
FROM orders  -- Dalla tabella degli ordini
WHERE city = 'Mosca'  -- Filtra le righe prima di raggruppare, solo ordini da Mosca
GROUP BY customer_id  -- Raggruppa le righe per ID cliente
HAVING SUM(order_amount) > 1000;  -- Filtra i gruppi, solo quelli con somma ordini > 1000