メインコンテンツへスキップ
メインコンテンツへスキップ

count

count

導入バージョン: v1.1

行数、または NULL 以外の値の数を数えます。

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

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

詳細

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) に使用される対象カラムに索引を作成するために、projection を使用することもできます。

構文

count([expr])

引数

  • expr — 省略可能。式です。この関数は、この式が null ではない値を返した回数をカウントします。Expression

戻り値

引数なしで呼び出された場合は行数を返し、引数が渡された場合は、渡された式が null ではない値を返した回数を返します。UInt64

基本的な行数のカウント

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

COUNT(DISTINCT) の使用例

-- This example shows that `count(DISTINCT num)` is performed by the `uniqExact` function according to the `count_distinct_implementation` setting value.
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation';
SELECT count(DISTINCT num) FROM t
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
┌─uniqExact(num)─┐
│              3 │
└────────────────┘