> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Подсчитывает количество строк или значений, отличных от NULL.

# count

<div id="count">
  ## count
</div>

Добавленный в: v1.1.0

Подсчитывает количество строк или значений, отличных от NULL.

ClickHouse поддерживает следующие варианты синтаксиса для `count`:

* `count(expr)` или `COUNT(DISTINCT expr)`.
* `count()` или `COUNT(*)`. Синтаксис `count()` специфичен для ClickHouse.

**Детали**

ClickHouse поддерживает синтаксис `COUNT(DISTINCT ...)`.
Поведение этой конструкции зависит от настройки [`count_distinct_implementation`](/ru/reference/settings/session-settings#count_distinct_implementation).
Она определяет, какая из функций [uniq\*](/ru/reference/functions/aggregate-functions/uniq) используется для выполнения этой операции.
По умолчанию используется функция [uniqExact](/ru/reference/functions/aggregate-functions/uniqExact).

Запрос `SELECT count() FROM table` по умолчанию оптимизируется с использованием метаданных MergeTree.
Если вам нужно использовать безопасность на уровне строк, отключите эту оптимизацию с помощью настройки [`optimize_trivial_count_query`](/ru/reference/settings/session-settings#optimize_trivial_count_query).

Однако запрос `SELECT count(nullable_column) FROM table` можно оптимизировать, включив настройку [`optimize_functions_to_subcolumns`](/ru/reference/settings/session-settings#optimize_functions_to_subcolumns).
При `optimize_functions_to_subcolumns = 1` функция считывает только подстолбец [`null`](/ru/reference/data-types/nullable#finding-null) вместо чтения и обработки всех данных столбца.
Запрос `SELECT count(n) FROM table` преобразуется в `SELECT sum(NOT n.null) FROM table`.

<Tip>
  **Повышение производительности COUNT(DISTINCT expr)**

  Если запрос `COUNT(DISTINCT expr)` выполняется медленно, попробуйте добавить [`GROUP BY`](/ru/reference/statements/select/group-by), так как это улучшает распараллеливание.
  Также можно использовать [projection](/ru/reference/statements/alter/projection), чтобы создать индекс для целевого столбца, используемого в `COUNT(DISTINCT target_col)`.
</Tip>

**Синтаксис**

```sql theme={null}
count([expr])
```

**Аргументы**

* `expr` — Необязательный параметр. Выражение. Функция подсчитывает, сколько раз это выражение возвращало не-NULL. [`Expression`](/ru/reference/data-types/special-data-types/expression)

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

Возвращает количество строк, если функция вызвана без параметров; в противном случае возвращает, сколько раз переданное выражение возвращало не-NULL. [`UInt64`](/ru/reference/data-types/int-uint)

**Примеры**

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

```sql title=Query theme={null}
SELECT count() FROM t
```

```response title=Response theme={null}
┌─count()─┐
│       5 │
└─────────┘
```

**Пример COUNT(DISTINCT)**

```sql title=Query theme={null}
-- В этом примере показано, что `count(DISTINCT num)` выполняется функцией `uniqExact` в соответствии со значением настройки `count_distinct_implementation`.
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t
```

```response title=Response theme={null}
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─uniqExact(num)─┐
│              3 │
└────────────────┘
```
