集計関数

集約関数は、 集合関数とも呼ばれ、各引数(列の値など)に対して値の集合を受け取り、入力値の集合に対して単一値の結果を返します。 特定の規則が、すべての集約関数に適用されます。

以下の説明は、すべての集約関数にあてはまります。ただし、XMLAGG 関数、および COUNT 関数と COUNT_BIG 関数の 1 形態である COUNT(*) と COUNT_BIG(*) は除きます。

集約関数の引数は、1 つの式から派生する一連の値の集合です。 式には、別の集約関数やスカラー全選択を含めることはできません。 値の集合の有効範囲は、GROUP BY 文節に関する情報で解説するように、 グループまたは中間結果表です。

照会に GROUP BY 文節が指定されており 、FROM、WHERE、GROUP BY、および HAVING 文節からの中間結果が空の セットである場合、 集約関数は適用されず、照会の結果は空のセットとなります。

照会に GROUP BY 文節が指定されておらず 、FROM、WHERE、および HAVING 文節からの中間結果表が空のセットである場合は、 空のセットに集約関数が適用されます。

例えば、以下の SELECT ステートメントの結果は、部門 D11 の 従業員に関して JOB の特殊値の数となります。
   SELECT COUNT(DISTINCT JOB)
     FROM DSN8C10.EMP
     WHERE WORKDEPT = 'D11';

キーワード DISTINCT は、関数の引数ではなく、関数が適用される前に実行される演算の指定です。 DISTINCT を指定した場合、列のマスクが適用される前に、冗長な重複する値は取り除かれます。 DISTINCT キーワードを持つ集約関数の列が、非グループ化列である列マスク定義の参照列を持ち、DISTINCT 操作のターゲット列ではない場合、集約関数の結果がそれぞれ異なる場合があります。 Db2 各実行で重複する行のグループから同じ行が返されることを保証するものではないため、返された行のDISTINCT/非グループ化列の値は毎回異なる可能性があります。

DISTINCT は、XML 値の前に指定してはなりません。

他の SQL インプリメンテーションとの互換性のため、集約関数で DISTINCT の同義語として UNIQUE を指定できます。

数値的に等しい 10 進浮動小数点値に対する DISTINCT 節を解釈するときに、値の有効数字の数は考慮されません。 例えば、10 進浮動小数点数 123.00 が、10 進浮動小数点数 123 と区別されることはありません。 照会から戻される数値の表記は、検出された表記のいずれかになります (例えば、123.00 または 123 のいずれか)。

WHERE 文節が HAVING 文節の副照会の一部であり、式の中で 指定された列の名前がグループへの相関参照である場合に限り、WHERE 文節で集約関数を使うことができます。 式の中に複数の列名が含まれる場合、それぞれの列名は同じ グループへの相関参照でなければなりません。

COUNT および COUNT_BIG 関数の結果は、NULL 値にはなりません。 AVG、 MAX、MIN、STDDEV、SUM、および VARIANCE の解説で述べるように、関数が空のセットに適用された場合、結果は NULL 値となります。 ただし、関数が外部選択リストで指定され、引数が算術式によって 与えられ、式の評価によって算術例外 (ゼロによる除算など) が 発生する場合にも、結果は NULL 値となります。

集約関数の引数値がフィールド・プロシージャーを持つ 列に入っていたストリングである場合、関数はエンコード形式の 値に適用され、関数の結果はフィールド・プロシージャーを継承します。