Добавленный в: v1.1.0
Подсчитывает количество строк или значений, отличных от NULL.
ClickHouse поддерживает следующие варианты синтаксиса для count:
count(expr) или COUNT(DISTINCT expr).
count() или COUNT(*). Синтаксис count() специфичен для ClickHouse.
Детали
ClickHouse поддерживает синтаксис COUNT(DISTINCT ...).
Поведение этой конструкции зависит от настройки count_distinct_implementation.
Она определяет, какая из функций uniq* используется для выполнения этой операции.
По умолчанию используется функция uniqExact.
Запрос SELECT count() FROM table по умолчанию оптимизируется с использованием метаданных MergeTree.
Если вам нужно использовать безопасность на уровне строк, отключите эту оптимизацию с помощью настройки optimize_trivial_count_query.
Однако запрос SELECT count(nullable_column) FROM table можно оптимизировать, включив настройку optimize_functions_to_subcolumns.
При optimize_functions_to_subcolumns = 1 функция считывает только подстолбец null вместо чтения и обработки всех данных столбца.
Запрос SELECT count(n) FROM table преобразуется в SELECT sum(NOT n.null) FROM table.
Повышение производительности COUNT(DISTINCT expr)Если запрос COUNT(DISTINCT expr) выполняется медленно, попробуйте добавить GROUP BY, так как это улучшает распараллеливание.
Также можно использовать projection, чтобы создать индекс для целевого столбца, используемого в COUNT(DISTINCT target_col).
Синтаксис
Аргументы
expr — Необязательный параметр. Выражение. Функция подсчитывает, сколько раз это выражение возвращало не-NULL. Expression
Возвращаемое значение
Возвращает количество строк, если функция вызвана без параметров; в противном случае возвращает, сколько раз переданное выражение возвращало не-NULL. UInt64
Примеры
Простой подсчёт строк
┌─count()─┐
│ 5 │
└─────────┘
Пример COUNT(DISTINCT)
-- В этом примере показано, что `count(DISTINCT num)` выполняется функцией `uniqExact` в соответствии со значением настройки `count_distinct_implementation`.
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─uniqExact(num)─┐
│ 3 │
└────────────────┘
Последнее изменение 10 июня 2026 г.