集約関数

集約関数は、(データの列のような) 値の集合を取り、この値の集合から単一値の結果を戻します。

以下の説明は、COUNT(*) および COUNT_BIG(*) を除くすべての集約関数に 適用されます。

  • 集約関数の引数は、1 つの式から得られた値の集合です。 式には列を含めることはできますが、他の集約関数を含めることはできません。 この集合の有効範囲は、第 6 章『照会』で説明しているグループまたは中間結果表です。
  • 照会で GROUP BY 文節が指定され、FROM、WHERE、GROUP BY、および HAVING 文節の中間結果が空の結果表である場合、集約関数は適用されず、 照会の結果は空の表になります。
  • 照会で GROUP BY 文節が指定されず、FROM、WHERE、および HAVING 文節の中間結果が空の結果表である場合、 空の結果表に集約関数が適用されます。 例えば、次の SELECT ステートメントの結果は、部門 D01 には従業員がいないため、空の結果表に適用されます。
      SELECT COUNT(DISTINCT JOB)
        FROM EMPLOYEE
        WHERE WORKDEPT = 'D01'
  • キーワード DISTINCT は、この関数の引数ではなく、この関数の適用に先立って決められる演算の仕様です。 DISTINCT が指定される場合は、重複する値は除かれます。 ALL が暗黙、または明示的に指定されている場合には、重複する値は除去されません。

    数の上で等しい 10 進浮動小数点値の DISTINCT 節を解釈する場合、値内の有効数字の桁数は考慮されません。例えば、10 進浮動小数点数 123.00 は、10 進浮動小数点数 123 とは異なりません。照会から戻された数の表記は、検出された表記のいずれか 1 つ (例えば、123.00 か 123 のどちらか) になります。

  • WHERE 文節の中で集約関数を使用できるのは、その文節 が HAVING 文節の副照会の一部であり、式の中で指定する列名がグループに 対する相関参照である場合だけです。 式に複数の列名が含まれている場合は、それらの列名は同じグループに 対する相関参照でなければなりません。