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

count

Считывает количество строк или ненулевых значений.

ClickHouse поддерживает следующие синтаксисы для count:

  • count(expr) или COUNT(DISTINCT expr).
  • count() или COUNT(*). Синтаксис count() специфичен для ClickHouse.

Аргументы

Функция может принимать:

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

  • Если функция вызывается без параметров, то она считает количество строк.
  • Если передано выражение, то функция подсчитывает, сколько раз это выражение вернуло ненулевое значение. Если выражение возвращает значение типа Nullable, то результат count остается не Nullable. Функция возвращает 0, если выражение возвращало NULL для всех строк.

В обоих случаях тип возвращаемого значения — UInt64.

Подробности

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

Примеры

Пример 1:

Пример 2:

Этот пример показывает, что count(DISTINCT num) выполняется с помощью функции uniqExact в соответствии с значением настройки count_distinct_implementation.