Sobes.tech
Junior

Care este diferența dintre construcțiile WHERE și HAVING în SQL?

sobes.tech AI

Răspuns de la AI

WHERE filtrează rândurile înainte de grupare (GROUP BY), influențând care rânduri vor participa la funcțiile de agregare. HAVING filtrează grupurile după grupare, bazându-se pe rezultatele funcțiilor de agregare.

Caracteristică WHERE HAVING
Aplicație La rânduri individuale La grupuri de rânduri
Timp de procesare Înainte de GROUP BY După GROUP BY
Utilizare Cu câmpuri din tabel, dar fără funcții de agregare Cu rezultate ale funcțiilor de agregare sau câmpuri din GROUP BY

Exemplu de utilizare WHERE:

SELECT nume_produs, preț
FROM produse
WHERE category_id = 1; -- Filtrează rândurile **înainte** de grupare (dacă ar fi avut loc)

Exemplu de utilizare HAVING:

SELECT category_id, COUNT(*) AS total_produse
FROM produse
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtrează grupurile **după** numărarea totalului de produse

Exemplu de utilizare combinată:

SELECT category_id, AVG(preț) AS preț_mediu
FROM produse
WHERE stoc > 0 -- Filtrează doar produsele în stoc **înainte** de grupare
GROUP BY category_id
HAVING AVG(preț) < 100; -- Filtrează grupurile cu prețul mediu mai mic de 100 **după** grupare și calculul mediei