Sobes.tech
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, HAVING i SELECT.

HAVING:

  • Dotyczy grup wierszy.
  • Może używać funkcji agregujących.
  • Wykonuje się po WHERE i GROUP BY, ale przed SELECT.

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