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

> 统计行数或数量的个数。

# 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`](/zh/reference/settings/session-settings#count_distinct_implementation) 设置。
它定义了使用 [uniq\*](/zh/reference/functions/aggregate-functions/uniq) 函数中的哪一个来执行该操作。
默认使用 [uniqExact](/zh/reference/functions/aggregate-functions/uniqExact) 函数。

默认情况下，`SELECT count() FROM table` 查询会利用 MergeTree 的元数据进行优化。
如果需要使用行级安全，请通过 [`optimize_trivial_count_query`](/zh/reference/settings/session-settings#optimize_trivial_count_query) 设置禁用此优化。

不过，`SELECT count(nullable_column) FROM table` 查询也可以通过启用 [`optimize_functions_to_subcolumns`](/zh/reference/settings/session-settings#optimize_functions_to_subcolumns) 设置进行优化。
当 `optimize_functions_to_subcolumns = 1` 时，该函数只会读取 [`null`](/zh/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`](/zh/reference/statements/select/group-by) 子句，这样可以提升并行化程度。
  你也可以使用[投影](/zh/reference/statements/alter/projection)，为 `COUNT(DISTINCT target_col)` 中使用的目标列创建索引。
</Tip>

**语法**

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

**参数**

* `expr` — 可选。一个表达式。该函数统计此表达式返回非 NULL 的次数。[`Expression`](/zh/reference/data-types/special-data-types/expression)

**返回值**

如果调用函数时不带参数，则返回行数；否则返回传入表达式返回非 NULL 的次数。[`UInt64`](/zh/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_implementation` 设置值，`count(DISTINCT num)` 由 `uniqExact` 函数执行。
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 │
└────────────────┘
```
