Junior
Jaka jest różnica między poleceniami WHERE i HAVING w SQL?
sobes.tech AI
Odpowiedź od AI
WHERE filtruje wiersze przed grupowaniem. HAVING filtruje grupy utworzone za pomocą GROUP BY, po grupowaniu.
WHERE:
- Dotyczy pojedynczych wierszy.
- Nie może używać funkcji agregujących (
COUNT,SUM,AVG,MIN,MAX). - Wykonuje się przed
GROUP BY,HAVINGiSELECT.
HAVING:
- Dotyczy grup wierszy.
- Może używać funkcji agregujących.
- Wykonuje się po
WHEREiGROUP BY, ale przedSELECT.
Przykład:
Znajdź klientów z miasta 'Moskwa' (gdzie WHERE), których łączna wartość zamówień przekracza 1000 (gdzie HAVING).
SELECT customer_id, SUM(order_amount) -- Wybierz ID klienta i sumę jego zamówień
FROM orders -- Z tabeli zamówień
WHERE city = 'Moskwa' -- Filtruje wiersze przed grupowaniem, pozostawia tylko zamówienia z Moskwy
GROUP BY customer_id -- Grupuje wiersze po ID klienta
HAVING SUM(order_amount) > 1000; -- Filtruje grupy, pozostawia tylko te z sumą zamówień > 1000