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

count

count

Введено в: v1.1

Подсчитывает количество строк или ненулевых (not 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. Если вам нужно использовать построчную (row-level) модель безопасности, отключите эту оптимизацию с помощью настройки 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, так как это улучшает параллелизацию. Вы также можете использовать проекцию для создания индекса на целевом столбце, который используется с COUNT(DISTINCT target_col).

Синтаксис

count([expr])

Аргументы

  • expr — необязательный параметр. Выражение. Функция считает, сколько раз это выражение вернуло значение, отличное от NULL. Expression

Возвращаемое значение

Возвращает количество строк, если функция вызывается без параметров, в противном случае — количество раз, когда переданное выражение вернуло значение, отличное от NULL. UInt64

Примеры

Базовый подсчёт строк

SELECT count() FROM t
┌─count()─┐
│       5 │
└─────────┘

Пример использования COUNT(DISTINCT)

-- This example shows that `count(DISTINCT num)` is performed by the `uniqExact` function according to the `count_distinct_implementation` setting value.
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 │
└────────────────┘