Sobes.tech
Назад к вопросам
Senior
5

Для чего нужен HAVING и почему не WHERE?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

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 не может этого сделать, так как агрегаты на этом этапе еще не вычислены.