> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-3a82795f.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`](/ja/reference/settings/session-settings#count_distinct_implementation) 設定によって決まります。
この設定では、処理の実行に使用する [uniq\*](/ja/reference/functions/aggregate-functions/uniq) 関数を指定します。
デフォルトは [uniqExact](/ja/reference/functions/aggregate-functions/uniqExact) 関数です。

`SELECT count() FROM table` クエリは、デフォルトで MergeTree のメタデータを使って最適化されます。
行レベルセキュリティを使用する必要がある場合は、[`optimize_trivial_count_query`](/ja/reference/settings/session-settings#optimize_trivial_count_query) 設定でこの最適化を無効にしてください。

一方、`SELECT count(nullable_column) FROM table` クエリは、[`optimize_functions_to_subcolumns`](/ja/reference/settings/session-settings#optimize_functions_to_subcolumns) 設定を有効にすることで最適化できます。
`optimize_functions_to_subcolumns = 1` の場合、この関数はカラム全体のカラムデータを読み取って処理する代わりに、[`null`](/ja/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`](/ja/reference/statements/select/group-by) 句を追加することを検討してください。
  また、`COUNT(DISTINCT target_col)` で使用する対象カラムに索引を作成するため、[projection](/ja/reference/statements/alter/projection) を使用することもできます。
</Tip>

**構文**

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

**引数**

* `expr` — 任意。式。この関数は、この式が NULL 以外の値を返した回数をカウントします。[`式`](/ja/reference/data-types/special-data-types/expression)

**戻り値**

パラメータなしで関数を呼び出した場合は行数を返し、それ以外の場合は、渡された式が NULL 以外の値を返した回数を返します。[`UInt64`](/ja/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 │
└────────────────┘
```
