count
Вычисляет количество строк или не NULL значений.
ClickHouse поддерживает следующие виды синтаксиса для count:
count(expr)илиCOUNT(DISTINCT expr).count()илиCOUNT(*). Синтаксисcount()специфичен для ClickHouse.
Аргументы
Функция может принимать:
- Ноль параметров.
- Одно выражение.
Возвращаемое значение
- Если функция вызывается без параметров, она вычисляет количество строк.
- Если передаётся выражение, то функция подсчитывает количество раз, когда выражение не равно NULL. Если выражение имеет тип 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.
Примеры
Пример 1:
Пример 2:
Этот пример показывает, что count(DISTINCT num) выполняется с помощью функции uniqExact в соответствии со значением настройки count_distinct_implementation.