Sobes.tech
Junior

Каква е разликата между командите WHERE и HAVING в SQL?

sobes.tech AI

Отговор от AI

WHERE филтрира редове преди групирането. HAVING филтрира групите, създадени с GROUP BY, след групирането.

WHERE:

  • Прилага се към отделни редове.
  • Не може да използва агрегатни функции (COUNT, SUM, AVG, MIN, MAX).
  • Изпълнява се преди GROUP BY, HAVING и SELECT.

HAVING:

  • Прилага се към групи от редове.
  • Може да използва агрегатни функции.
  • Изпълнява се след WHERE и GROUP BY, но преди SELECT.

Пример:

Намерете клиенти от град 'Москва' (където WHERE), чиято обща сума на поръчките надвишава 1000 (където HAVING).

SELECT customer_id, SUM(order_amount)  -- Избира ID на клиента и сумата на поръчките му
FROM orders  -- От таблицата с поръчки
WHERE city = 'Москва'  -- Филтрира редовете преди групиране, оставя само поръчки от Москва
GROUP BY customer_id  -- Групира редовете по ID на клиента
HAVING SUM(order_amount) > 1000;  -- Филтрира групите, оставя само тези с сума > 1000