集計ファンクションは、単一行に基づく結果行を戻すのではなく、行のグループに基づく単一結果行を戻します。集計ファンクションは、SELECT構文のリスト、ORDER
BY
およびHAVING
句に指定できます。集計ファンクションは、通常、SELECT
文のGROUP
BY
句で使用され、この句の中で問合せ対象の表またはビューの行がグループ化されます。GROUP
BY
句を含む問合せでは、SELECT構文のリストの要素は、集計ファンクション、GROUP
BY
式、定数またはこれらのいずれかを含む式になります。Oracleは、集計ファンクションを行の各グループに適用し、各グループに単一の結果行を戻します。
GROUP
BY
句を指定しないと、SELECT構文のリスト内の集計ファンクションは、問合せ対象の表またはビューのすべての行に適用されます。HAVING
句で集計ファンクションを使用して、グループを出力しないこともできます。このとき、出力は、問合せ対象の表またはビューの各行の値ではなく、集計ファンクションの結果に基づきます。
単一の引数を指定する多くの集計ファンクションには、次の句があります。
DISTINCT
句およびUNIQUE
句(これらは同義)を指定すると、集計ファンクションは引数式の重複行を排除した値のみを考慮します。簡単に説明するために、この章の集計ファンクションの構文図ではキーワードDISTINCT
を使用しています。
ALL
句を指定すると、集計ファンクションは重複行を含むすべての値を考慮します。
たとえば、1、1、1、3の平均値はDISTINCT
では2となります。ALL
での平均値は1.5となります。どの句も指定しない場合、デフォルトでALL
が使用されます。
集計ファンクションには、分析ファンクションの構文の一部であるwindowing_clause
を使用できるものがあります。この句の詳細は、「windowing_clause」を参照してください。この項の最後に示す集計ファンクションのリストでは、windowing_clause
を使用できるファンクションにアスタリスク(*)が付いています。
COUNT
(*)、GROUPING
、およびGROUPING_ID
を除くすべての集計ファンクションは、NULLを無視します。集計ファンクションに対する引数にNVL
ファンクションを使用して、NULLをある値で置き換えることができます。COUNT
およびREGR_COUNT
はNULLを戻しません。数字または0(ゼロ)を戻します。その他の集計ファンクションでは、データ・セットに行がない場合、または集計ファンクションに対する引数としてNULLを持つ行のみがある場合はNULLを戻します。
集計ファンクションMIN
、MAX
、SUM
、AVG
、COUNT
、VARIANCE
およびSTDDEV
の後に、KEEP
キーワードを指定すると、FIRST
またはLAST
ファンクションと組み合せて使用することができ、与えられたソート指定に対して、FIRST
またはLAST
としてランク付けされた一連の行の一連の値を操作できます。詳細は、「FIRST」を参照してください。
集計ファンクションはネストできます。たとえば、次の例では、サンプル・スキーマhr
のすべての部門における最高額の給与の平均を計算します。
SELECT AVG(MAX(salary)) FROM employees GROUP BY department_id; AVG(MAX(SALARY)) ---------------- 10926.3333
この計算では、GROUP
BY
句(department_id
)で定義されているグループごとの内部集計(MAX
(salary
))を評価し、その結果をもう一度集計しています。
次に示す集計ファンクションのリストでは、windowing_clause
を使用できるファンクションにはアスタリスク(*)が付いています。