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