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