メインコンテンツまでスキップ
メインコンテンツまでスキップ

count

行または非NULL値の数をカウントします。

ClickHouseはcountのために以下の構文をサポートしています:

  • count(expr) または COUNT(DISTINCT expr)
  • count() または COUNT(*)count()構文はClickHouse特有のものです。

引数

関数は次のものを受け取ることができます:

  • パラメータなし。
  • 一つの expression

返される値

  • パラメータなしで関数が呼び出された場合、行の数をカウントします。
  • expressionが渡された場合、この式が非NULLを返した回数をカウントします。式がNullable-タイプの値を返す場合、countの結果は非Nullableのままです。すべての行で式がNULLを返した場合、関数は0を返します。

両方の場合において、返される値の型は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 tableSELECT sum(NOT n.null) FROM tableに変換されます。

COUNT(DISTINCT expr)のパフォーマンス改善

COUNT(DISTINCT expr)クエリが遅い場合は、並列化を改善するためにGROUP BY句を追加することを検討してください。また、COUNT(DISTINCT target_col)に使用されるターゲットカラムにインデックスを作成するためにプロジェクションを使用できます。

例 1:

例 2:

この例では、count(DISTINCT num)count_distinct_implementation設定値に従ってuniqExact関数によって実行されることが示されています。