Перейти к основному содержанию
Перейти к основному содержанию

Предложение HAVING

Позволяет фильтровать результаты агрегирования, полученные с помощью 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.