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

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.