メインコンテンツまでスキップ
メインコンテンツまでスキップ

集約関数

集約関数は、データベース専門家が期待する通常の方法で動作します。

ClickHouse はまた、以下をサポートしています:

NULL 処理

集約中は、すべての NULL 引数がスキップされます。集約に複数の引数がある場合、それらのいずれかが NULL の行は無視されます。

このルールには例外があります。first_valuefirst とそのエイリアス)、last_valuelast とそのエイリアス)関数が 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 値のために集約関数はその行をスキップしません。

集約関数に引数としてカラムが使用されると、集約はスキップされることに注意してください。たとえば、パラメータなしの countcount())または定数だけのもの(count(1))は、GROUP BY カラムの値に関係なくブロック内のすべての行をカウントしますが、count(column) は、カラムが NULL でない行の数だけを返します。

ここに、RESPECT NULLS を使った first_value の例があります。NULL 入力が尊重され、最初に読み取られた値を返します、NULL であってもなくてもです。