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