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

Использование фильтрующих агрегатов

ClickHouse предоставляет простой и понятный способ задавать фильтрующие агрегаты. Например, сравните стандартный SQL-способ записи фильтрующих агрегатов (который отлично работает в ClickHouse) с сокращённым синтаксисом с использованием комбинатора агрегатных функций -If комбинатор агрегатных функций, который можно добавить к любой агрегатной функции:
--стандартный SQL
SELECT
   avg(number)
FILTER (WHERE number > 50)
FROM numbers(100)

--ClickHouse с использованием комбинатора агрегатных функций
SELECT
   avgIf(number, number > 50)
FROM numbers(100)
Аналогично, существует агрегатный комбинатор -Distinct:
--стандартный SQL
SELECT avg(DISTINCT number)

--ClickHouse с использованием комбинатора агрегатных функций
SELECT avgDistinct(number)
Почему фильтрующие агрегаты важны? Потому что они позволяют реализовать возможность “сравнения сегментов” в сервисах веб-аналитики. Например:
WITH
   Region = 'us' AS segment1,
   Browser = 'Chrome' AS segment2
SELECT
   uniqIf(UserID, segment1),
   uniqIf(UserID, segment2)
WHERE segment1 OR segment2
Подробнее см. на странице комбинатор агрегатных функций в документации.
Последнее изменение 10 июня 2026 г.