集約関数
集約関数は、データベースのエキスパートが期待する通常の方法で動作します。
ClickHouseは以下もサポートしています:
- パラメトリック集約関数は、カラムに加えて他のパラメータを受け取ります。
- コンビネーターは、集約関数の動作を変更します。
NULL処理
集約中は、すべての NULL
引数がスキップされます。集約に複数の引数がある場合、1つ以上の引数がNULLである行は無視されます。
このルールには例外があります。first_value
(any
)および last_value
(anyLast
)関数は、修飾子 RESPECT NULLS
に続く場合です。例えば、FIRST_VALUE(b) RESPECT NULLS
のようになります。
例:
このテーブルを考えてみましょう:
y
カラムの合計を求めるとします:
次に、groupArray
関数を使用して y
カラムから配列を作成します:
groupArray
は結果の配列に NULL
を含めません。
COALESCE を使用して、NULL をケースに応じて意味のある値に変更できます。例えば、avg(COALESCE(column, 0))
は、NULL の場合は 0 を使用し、カラム値を集約に使用します:
また、Tuple を使用して NULL スキップの動作を回避することもできます。NULL
のみを含む Tuple
は NULL ではないため、その NULL 値によって集約関数はその行をスキップしません。
集約関数に引数としてカラムが使用されると、集約がスキップされることに注意してください。例えば、引数なしの count
(count()
)や定数のもの(count(1)
)は、ブロック内のすべての行をカウントします(GROUP BY カラムの値にかかわらず、引数ではないため)。一方で、count(column)
は、カラムがNULLでない行の数のみを返します。
次に、RESPECT NULLS
を使用した first_value の例を示します。ここでは、NULL 入力が尊重され、最初に読み取られた値が NULL であっても返されることを示しています: