Sobes.tech
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