Skip to main content

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 tableからSELECT sum(NOT n.null) FROM tableに変換されます。

COUNT(DISTINCT expr)のパフォーマンス向上

COUNT(DISTINCT expr)クエリが遅い場合、並列化を改善するためにGROUP BY句を追加することを検討してください。また、projectionを使用して、COUNT(DISTINCT target_col)と一緒に使用する対象カラムにインデックスを作成することもできます。

例1:

SELECT count() FROM t
┌─count()─┐
│ 5 │
└─────────┘

例2:

SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation'
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
SELECT count(DISTINCT num) FROM t
┌─uniqExact(num)─┐
│ 3 │
└────────────────┘

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