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

count

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

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

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

引数

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

  • ゼロ個のパラメータ。
  • 一つの

返される値

  • パラメータなしで関数が呼ばれた場合、行の数をカウントします。
  • が渡された場合、この式が何回非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関数によって実行されることを示しています。