Назад к вопросам
Junior
213
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

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 группировки и расчета среднего