Sobes.tech
Junior

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

sobes.tech AI

Risposta dell'AI

DOVE filtra le righe prima di raggruppare (GROUP BY), influenzando quali righe parteciperanno alle funzioni di aggregazione. HAVING filtra i gruppi dopo averli creati, basandosi sui risultati delle funzioni di aggregazione.

Caratteristica WHERE HAVING
Applicazione Su righe singole Su gruppi di righe
Momento di elaborazione Prima di GROUP BY Dopo GROUP BY
Uso Con campi della tabella, ma senza funzioni di aggregazione Con risultati di funzioni di aggregazione o campi di GROUP BY

Esempio di utilizzo di WHERE:

SELECT nome_prodotto, prezzo
FROM prodotti
WHERE category_id = 1; -- Filtra le righe **prima** di raggruppare (se fosse stato necessario)

Esempio di utilizzo di HAVING:

SELECT category_id, COUNT(*) AS totale_prodotti
FROM prodotti
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtra i gruppi **dopo** aver contato il numero totale di prodotti

Esempio di utilizzo combinato:

SELECT category_id, AVG(prezzo) AS prezzo_medio
FROM prodotti
WHERE stock > 0 -- Filtra solo prodotti in stock **prima** di raggruppare
GROUP BY category_id
HAVING AVG(prezzo) < 100; -- Filtra i gruppi con prezzo medio inferiore a 100 **dopo** averli raggruppati e calcolato la media