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 │
└────────────────────┘