Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

count

count

Добавленный в: 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([expr])

Аргументы

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

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

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

Примеры

Простой подсчёт строк

CREATE TABLE t (num UInt8) ENGINE = Memory;
INSERT INTO t VALUES (1), (1), (2), (2), (3);

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 │
└───────────────────────────────┴───────────┘
┌─countDistinct(num)─┐
│                  3 │
└────────────────────┘
Navigation