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

Агрегатные функции

Агрегатные функции работают в нормальном режиме, как ожидают эксперты по базам данных.

ClickHouse также поддерживает:

Обработка NULL

Во время агрегации все аргументы 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) вернет только количество строк, где колонка не NULL.

А вот пример использования first_value с RESPECT NULLS, где мы можем видеть, что введенные значения NULL учитываются, и функция вернет первое значение, прочитанное вне зависимости от того, является ли оно NULL или нет: