Sobes.tech
Junior

Care este diferența dintre instrucțiunile WHERE și HAVING în SQL?

sobes.tech AI

Răspuns de la AI

WHERE filtrează rândurile înainte de grupare. HAVING filtrează grupurile create cu GROUP BY, după grupare.

WHERE:

  • Se aplică la rânduri individuale.
  • Nu poate folosi funcții de agregare (COUNT, SUM, AVG, MIN, MAX).
  • Se execută înainte de GROUP BY, HAVING și SELECT.

HAVING:

  • Se aplică grupurilor de rânduri.
  • Poate folosi funcții de agregare.
  • Se execută după WHERE și GROUP BY, dar înainte de SELECT.

Exemplu:

Găsiți clienți din orașul 'Moscova' (unde WHERE) ale căror sume totale ale comenzilor depășesc 1000 (unde HAVING).

SELECT customer_id, SUM(order_amount)  -- Selectează ID-ul clientului și suma comenzilor
FROM orders  -- Din tabelul comenzilor
WHERE city = 'Moscova'  -- Filtrează rândurile înainte de grupare, păstrează doar comenzile din Moscova
GROUP BY customer_id  -- Grupează rândurile după ID-ul clientului
HAVING SUM(order_amount) > 1000;  -- Filtrează grupurile, păstrează doar cele cu suma comenzilor > 1000