В чем отличие между конструкциями WHERE и HAVING в SQL?

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

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

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

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

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

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

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

Особенность WHERE HAVING
Применение К отдельным строкам К группам строк
Время обработки Перед GROUP BY После GROUP BY
Использование С полями из таблицы, но без агрегатных функций С результатами агрегатных функций или полями из GROUP BY

Пример использования WHERE:

SELECT product_name, price
FROM products
WHERE category_id = 1; -- Фильтруем строки до группировки (если бы она была)

Пример использования HAVING:

SELECT category_id, COUNT(*) AS total_products
FROM products
GROUP BY category_id
HAVING COUNT(*) > 5; -- Фильтруем группы после подсчета общего количества товаров

Пример совместного использования:

SELECT category_id, AVG(price) AS average_price
FROM products
WHERE stock > 0 -- Фильтруем только товары в наличии BEFORE группировки
GROUP BY category_id
HAVING AVG(price) < 100; -- Фильтруем группы со средней ценой меньше 100 AFTER группировки и расчета среднего

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

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

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

Подробнее