Sobes.tech
Junior

Jaký je rozdíl mezi konstrukcemi WHERE a HAVING v SQL?

sobes.tech AI

Odpověď od AI

WHERE filtruje řádky před seskupením (GROUP BY), ovlivňuje, které řádky se zúčastní agregačních funkcí. HAVING filtruje skupiny po seskupení, na základě výsledků agregačních funkcí.

Vlastnost WHERE HAVING
Použití Na jednotlivé řádky Na skupiny řádků
Čas zpracování Před GROUP BY Po GROUP BY
Použití S poli z tabulky, ale bez agregačních funkcí S výsledky agregačních funkcí nebo poli z GROUP BY

Příklad použití WHERE:

SELECT název_produktu, cena
FROM produkty
WHERE category_id = 1; -- Filtruje řádky **před** seskupením (pokud by došlo)

Příklad použití HAVING:

SELECT category_id, COUNT(*) AS celkový_počet_produktů
FROM produkty
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtruje skupiny **po** spočítání celkového počtu produktů

Příklad společného použití:

SELECT category_id, AVG(cena) AS průměrná_cena
FROM produkty
WHERE sklad > 0 -- Filtruje pouze produkty na skladě **před** seskupením
GROUP BY category_id
HAVING AVG(cena) < 100; -- Filtruje skupiny s průměrnou cenou menší než 100 **po** seskupení a výpočtu průměru