Логически HAVING фильтрует группы после GROUP BY и вычисления агрегатов, тогда как WHERE отбирает исходные строки. Физический порядок выполнения оптимизатор может организовать иначе.
Когда выполняется HAVING в SQL?
Логически HAVING фильтрует группы после GROUP BY и вычисления агрегатов, тогда как WHERE отбирает исходные строки. Физический порядок выполнения оптимизатор может организовать иначе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Логически HAVING фильтрует группы после GROUP BY и вычисления агрегатов, тогда как WHERE отбирает исходные строки. Физический порядок выполнения оптимизатор может организовать иначе.
Например, GROUP BY customer_id HAVING COUNT(*) > 2 оставляет клиентов с более чем двумя выбранными заказами. Условие по статусу заказа обычно помещают в WHERE до подсчёта. Без GROUP BY агрегатный запрос может рассматриваться как одна группа в поддерживающей это СУБД. Не выводите порядок вычисления выражений только из их позиции в написанном SQL.