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