Sobes.tech
Junior

Jaký je rozdíl mezi příkazy WHERE a HAVING v SQL?

sobes.tech AI

Odpověď od AI

WHERE filtruje řádky před seskupením. HAVING filtruje skupiny vytvořené pomocí GROUP BY, po seskupení.

WHERE:

  • Platí na jednotlivé řádky.
  • Nemůže používat agregační funkce (COUNT, SUM, AVG, MIN, MAX).
  • Je prováděno dříve než GROUP BY, HAVING a SELECT.

HAVING:

  • Platí na skupiny řádků.
  • Může používat agregační funkce.
  • Je prováděno po WHERE a GROUP BY, ale před SELECT.

Příklad:

Najděte zákazníky z města 'Moskva' (kde WHERE), jejichž celková částka objednávek přesahuje 1000 (kde HAVING).

SELECT customer_id, SUM(order_amount)  -- Vyberte ID zákazníka a součet jeho objednávek
FROM orders  -- Z tabulky objednávek
WHERE city = 'Moskva'  -- Filtruje řádky před seskupením, ponechává pouze objednávky z Moskvy
GROUP BY customer_id  -- Seskupí řádky podle ID zákazníka
HAVING SUM(order_amount) > 1000;  -- Filtruje skupiny, ponechává pouze ty s součtem objednávek > 1000