count
導入バージョン: v1.1.0
行数、または 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 table は SELECT sum(NOT n.null) FROM table に変換されます。
構文
count([expr])引数
expr— 任意。式。この関数は、この式が NULL 以外の値を返した回数をカウントします。式
戻り値
パラメータなしで関数を呼び出した場合は行数を返し、それ以外の場合は、渡された式が NULL 以外の値を返した回数を返します。UInt64
例
基本的な行数カウント
CREATE TABLE t (num UInt8) ENGINE = Memory;
INSERT INTO t VALUES (1), (1), (2), (2), (3);
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 │
└───────────────────────────────┴───────────┘
┌─countDistinct(num)─┐
│ 3 │
└────────────────────┘