Sobes.tech
Junior

Aký je rozdiel medzi konštrukciami WHERE a HAVING v SQL?

sobes.tech AI

Odpoveď od AI

WHERE filtruje riadky pred zoskupením (GROUP BY), ovplyvňuje, ktoré riadky sa zúčastnia na agregačných funkciách. HAVING filtruje skupiny po zoskupení, na základe výsledkov agregačných funkcií.

Vlastnosť WHERE HAVING
Použitie Na jednotlivé riadky Na skupiny riadkov
Čas spracovania Pred GROUP BY Po GROUP BY
Použitie S poľami z tabuľky, ale bez agregačných funkcií S výsledkami agregačných funkcií alebo poľami z GROUP BY

Príklad použitia WHERE:

SELECT názov_produktu, cena
FROM produkty
WHERE category_id = 1; -- Filtruje riadky **pred** zoskupením (ak by sa to stalo)

Príklad použitia HAVING:

SELECT category_id, COUNT(*) AS celkový_počet_produktov
FROM produkty
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtruje skupiny **po** spočítaní celkového počtu produktov

Príklad spoločného použitia:

SELECT category_id, AVG(cena) AS priemerná_cena
FROM produkty
WHERE sklad > 0 -- Filtruje iba produkty na sklade **pred** zoskupením
GROUP BY category_id
HAVING AVG(cena) < 100; -- Filtruje skupiny s priemernou cenou menej ako 100 **po** zoskupení a výpočte priemeru