Sobes.tech
Junior

Aký je rozdiel medzi príkazmi WHERE a HAVING v SQL?

sobes.tech AI

Odpoveď od AI

WHERE filtruje riadky pred skupinovaním. HAVING filtruje skupiny vytvorené pomocou GROUP BY, po skupinovaní.

WHERE:

  • Platí na jednotlivé riadky.
  • Nemôže používať agregačné funkcie (COUNT, SUM, AVG, MIN, MAX).
  • Je vykonávané pred GROUP BY, HAVING a SELECT.

HAVING:

  • Platí na skupiny riadkov.
  • Môže používať agregačné funkcie.
  • Je vykonávané po WHERE a GROUP BY, ale pred SELECT.

Príklad:

Nájdite zákazníkov z mesta 'Moskva' (kde WHERE), ktorých celková suma objednávok presahuje 1000 (kde HAVING).

SELECT customer_id, SUM(order_amount)  -- Vyberte ID zákazníka a súčet jeho objednávok
FROM orders  -- Z tabuľky objednávok
WHERE city = 'Moskva'  -- Filtruje riadky pred skupinovaním, ponecháva iba objednávky z Moskvy
GROUP BY customer_id  -- Skupinu riadkov podľa ID zákazníka
HAVING SUM(order_amount) > 1000;  -- Filtruje skupiny, ponecháva iba tie s súčtom objednávok > 1000