Назад к вопросам
OZON
Senior
5
Для чего нужен HAVING и почему не WHERE?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
WHERE фильтрует строки до группировки, то есть применяется к исходным данным. HAVING же фильтрует уже сгруппированные данные, то есть результаты агрегатных функций.
Например, если нужно выбрать клиентов, у которых сумма заказов больше 1000, нельзя использовать WHERE, потому что сумма — это агрегатная функция, и она вычисляется после группировки:
SELECT customer_id, SUM(order_amount) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(order_amount) > 1000;
Здесь HAVING фильтрует группы по условию суммы, а WHERE не может этого сделать, так как агрегаты на этом этапе еще не вычислены.