集約関数

集約関数 (以前は列関数と呼ばれていました) は引数を受け入れ、1 つのスカラー値を返します。これは、1 つ以上の行のセット内の列にある値など、類似した値のセットの評価の結果です。

集約関数の引数は、1 つの式から派生する一連の値の集合です。 式に列を組み込むことはできますが、 スカラー全選択、他の集約関数、または XMLQUERY や XMLEXISTS の式 を組み込むことはできません (SQLSTATE 42607)。 その集合の有効範囲は、グループ、 または中間結果表です。

GROUP BY 節が照会内に指定されている場合に、 FROM、WHERE、GROUP BY および HAVING 節の中間結果が空のセットであると、 集約関数は適用されません。つまり、照会の結果は空のセットとなり、 SQLCODE は +100 に設定され、SQLSTATE は '02000' に設定されます。

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

例えば、次の SELECT ステートメントの結果は、 部門 D01 の社員に対して重複しない JOBCODE 値の数となります。
   SELECT COUNT(DISTINCT JOBCODE)
     FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D01'

キーワード DISTINCT は、関数の引数ではなく、関数が適用される以前に実行される演算の指定と見なされます。 DISTINCT を指定すると、重複する値は除去されます。 数値的に等しい 10 進浮動小数点値に関して DISTINCT 節を解釈するとき、値の中の有効数字桁数は考慮されません。 例えば、10 進浮動小数点数 123.00 が、10 進浮動小数点数 123 と区別されることはありません。 照会から戻される数の表記は、検出された表記のいずれかになります (例えば 123.00 か 123 のいずれか)。

暗黙のうちにまたは明示的に ALL を指定すると、重複する値は削除されません。

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

集約関数で、式を使用することができます。 以下に例を示します。
   SELECT MAX(BONUS + 1000)
     INTO :TOP_SALESREP_BONUS
     FROM EMPLOYEE
     WHERE COMM > 5000

集約関数は、スキーマ名 (例えば SYSIBM.COUNT(*)) で修飾することができます。