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