Позволяет фильтровать результаты агрегации, сформированные с помощью GROUP BY. Он похож на оператор WHERE, но отличается тем, что WHERE выполняется до агрегации, а HAVING — после неё.
В операторе HAVING можно ссылаться на результаты агрегации из оператора SELECT по их псевдонимам. Кроме того, HAVING позволяет фильтровать по результатам дополнительных агрегатных функций, которые не выводятся в результате запроса.
Пример
Если у вас есть таблица sales следующего вида:
CREATE TABLE sales
(
region String,
salesperson String,
amount Float64
)
ORDER BY (region, salesperson);Вы можете выполнить запрос к нему следующим образом:
SELECT
region,
salesperson,
sum(amount) AS total_sales
FROM sales
GROUP BY
region,
salesperson
HAVING total_sales > 10000
ORDER BY total_sales DESC;Здесь будут перечислены продавцы, у которых общий объём продаж в регионе превышает 10 000.
Ограничения
HAVING нельзя использовать, если агрегация не используется. Вместо этого используйте WHERE.