ClickHouse/docs/ru/sql-reference/aggregate-functions/reference/count.md
2020-10-13 20:23:29 +03:00

3.5 KiB
Raw Blame History

toc_priority
1

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 не оптимизирован, поскольку количество записей в таблице не хранится отдельно. Он выбирает небольшой столбец из таблицы и подсчитывает количество значений в нём.

Примеры

Пример 1:

SELECT count() FROM t
┌─count()─┐
│       5 │
└─────────┘

Пример 2:

SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation'
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
SELECT count(DISTINCT num) FROM t
┌─uniqExact(num)─┐
│              3 │
└────────────────┘

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

Оригинальная статья