Sobes.tech
Back to questions
Junior — Middle
75

В чем отличие между условиями HAVING и WHERE, и почему некоторые ограничения существуют для HAVING?

Answer from AI

sobes.tech AI

WHERE и HAVING — это условия фильтрации в SQL, но применяются на разных этапах:

  • WHERE фильтрует строки до группировки. Он ограничивает набор данных, который будет агрегирован.
  • HAVING фильтрует уже сгруппированные данные, то есть результаты агрегатных функций.

Например, чтобы выбрать клиентов с суммой заказов больше 1000:

SELECT customer_id, SUM(amount) as total
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Ограничения для HAVING связаны с тем, что он работает с агрегатами, поэтому нельзя использовать в HAVING колонки, которые не входят в GROUP BY или не агрегированы. В WHERE нельзя использовать агрегатные функции, потому что фильтрация происходит до группировки.