'Having' - это ключевое слово в SQL, которое позволяет пользователю фильтровать результаты, полученные с помощью оператора 'GROUP BY'. На самом деле, это аналогично использованию оператора WHERE, но 'HAVING' применяется вместе с функциями группировки, такими как COUNT, AVG, MAX, MIN и т.д.
Если в SQL-запросе используется оператор GROUP BY, то условие фильтрации, указанное в клаузе WHERE, применяется к каждой строке, прежде чем строки группируются. Когда требуется фильтровать группы по определённому условию, то здесь на помощь приходит клауза HAVING.
Допустим, у нас есть таблица продаж со следующими данными:
| Продавец | Проданный товар | |----------|-----------------| | Андрей | 10 | | Сергей | 15 | | Андрей | 20 | | Мария | 25 |
И мы хотим найти продавцов, которые продали товаров на сумму больше 20. Для этого мы можем использовать следующий SQL-запрос с клаузой HAVING:
SELECT продавец, SUM(проданный_товар)
FROM продажи
GROUP BY продавец
HAVING SUM(проданный_товар) > 20;
Результат будет следующим:
| Продавец | SUM(проданный_товар) | |----------|----------------------| | Андрей | 30 | | Мария | 25 |
Таким образом, с помощью клаузы HAVING мы смогли фильтровать агрегированные данные после группировки. Но стоит понимать, что HAVING без GROUP BY имеет меньше смысла, так как он будет работать как клауза WHERE.