Junior
Jaka jest różnica między konstrukcjami WHERE i HAVING w SQL?
sobes.tech AI
Odpowiedź od AI
WHERE filtruje wiersze przed grupowaniem (GROUP BY), wpływając na to, które wiersze będą brały udział w funkcjach agregujących. HAVING filtruje grupy po grupowaniu, opierając się na wynikach funkcji agregujących.
| Cecha | WHERE | HAVING |
|---|---|---|
| Zastosowanie | Do pojedynczych wierszy | Do grup wierszy |
| Czas przetwarzania | Przed GROUP BY | Po GROUP BY |
| Użycie | Z polami z tabeli, ale bez funkcji agregujących | Z wynikami funkcji agregujących lub polami z GROUP BY |
Przykład użycia WHERE:
SELECT nazwa_produktu, cena
FROM produkty
WHERE category_id = 1; -- Filtrujemy wiersze **przed** grupowaniem (gdyby miało miejsce)
Przykład użycia HAVING:
SELECT category_id, COUNT(*) AS liczba_produktow
FROM produkty
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtrujemy grupy **po** policzeniu łącznej liczby produktów
Przykład wspólnego użycia:
SELECT category_id, AVG(cena) AS srednia_cena
FROM produkty
WHERE stock > 0 -- Filtrujemy tylko produkty dostępne w magazynie **przed** grupowaniem
GROUP BY category_id
HAVING AVG(cena) < 100; -- Filtrujemy grupy z średnią ceną poniżej 100 **po** grupowaniu i obliczeniu średniej