В чем разница между WHERE и HAVING в SQL и зачем использовать HAVING после GROUP BY?

В SQL оператор WHERE фильтрует строки до группировки, то есть он применяется к исходным данным и исключает ненужные записи перед выполнением агрегатных функций.

Короткий ответ

Что ответить на собеседовании

В SQL оператор WHERE фильтрует строки до группировки, то есть он применяется к исходным данным и исключает ненужные записи перед выполнением агрегатных функций.

Подробный разбор

Ответ с пояснениями

В SQL оператор WHERE фильтрует строки до группировки, то есть он применяется к исходным данным и исключает ненужные записи перед выполнением агрегатных функций.

HAVING же используется для фильтрации уже сгруппированных данных после применения GROUP BY. Он позволяет отфильтровать группы по агрегатным условиям.

Например, если нужно выбрать клиентов, у которых сумма заказов больше 1000, то WHERE не подойдет, так как сумма — агрегатная функция, а HAVING — именно для таких случаев:

SELECT customer_id, SUM(order_amount) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(order_amount) > 1000;

Таким образом, HAVING используется для фильтрации результатов агрегирования, а WHERE — для фильтрации исходных данных до агрегирования.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее