Агрегатные функции работают обычным образом, как и ожидают специалисты по базам данных.
ClickHouse также поддерживает:
При агрегации все аргументы со значением NULL пропускаются. Если у агрегации несколько аргументов, игнорируется любая строка, в которой один или несколько из них имеют значение NULL.
Из этого правила есть исключение: функции first_value, last_value и их псевдонимы (any и anyLast соответственно), если за ними следует модификатор RESPECT NULLS. Например, FIRST_VALUE(b) RESPECT NULLS.
Примеры:
Рассмотрим следующую таблицу:
Допустим, вам нужно суммировать значения в столбце y:
Теперь вы можете использовать функцию groupArray, чтобы создать массив из столбца y:
groupArray не включает NULL в результирующий массив.
Вы можете использовать COALESCE, чтобы заменить NULL на значение, подходящее для вашего сценария использования. Например, avg(COALESCE(column, 0)) будет использовать значение столбца при агрегации или ноль, если это NULL:
Также можно использовать Tuple, чтобы обойти поведение, связанное с пропуском NULL. Tuple, содержащий только значение NULL, сам не является NULL, поэтому агрегатные функции не будут пропускать эту строку из-за этого значения NULL.
Обратите внимание, что агрегации пропускаются, если столбцы используются в качестве аргументов агрегатной функции. Например, count без параметров (count()) или с константными параметрами (count(1)) будет подсчитывать все строки в блоке (независимо от значения столбца GROUP BY, так как он не является аргументом), тогда как count(column) вернет только количество строк, в которых column не равно NULL.
И вот пример first_value с RESPECT NULLS, где видно, что входные значения NULL учитываются и возвращается первое прочитанное значение — независимо от того, равно оно NULL или нет:
Последнее изменение 2 июля 2026 г.