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