集約 (集合関数)

この節は集約(ANSI SQL-92では集合関数、データベースの書籍によっては列関数と呼びます。)について説明します。集約は、行の集合に対して式を評価する方法を提供します。他の組込み関数は単式に対して作用しますが、集約は値の集合に対して作用して一つのスカラー値にまとめられます。組込みの集約により、値の集合に対して、式の最小値、最大値、合計、計数を行い、例えば行を数えるような事ができます。また組込みのものとは別に集約を作って、例えば標準偏差を計算するようなこともできます。

組込みの集約は、組込みの集約にて可能なデータ型にあるデータ型に作用させることができます。
表 1. 組込みの集約にて可能なデータ型
  全データ型 組込みの数値型
COUNT X X
MIN   X
MAX   X
AVG   X
SUM   X
集約は以下の文脈にのみ置くことができます。
選択式選択項目にある全式は、集約か分類列である必要があります。(GROUP BY 節を参照してください。) (GROUP BY 節がないにもかかわらず、HAVING節がある場合も同様です。) なぜならば、選択式ResultSetは、スカラー(単値)かベクトル(副値)のいずれかでなければならず、その混合は許されていないからです。(集約はスカラーの値と評価され、列への参照はベクトルの値と評価されます。)例えば次の問合せはスカラーとベクトルの値が混ざっているので無効です。
-- not valid
SELECT MIN(flying_time), flight_id
FROM Flights
集約にて外部への参照(相関)は無効です。つまり、副問合せが集約を含むならば、その集約が作用する式は、副問合せの外にある問合せの列を参照できません。 例えば、SUM演算子が外の問合せの列に対して行われているので、次の問合せは有効ではありません。
SELECT c1
FROM t1
GROUP BY c1
HAVING c2 >
    (SELECT t2.x
    FROM t2
    WHERE t2.y = SUM(t1.c3)) 

集約が外の問合せにある場合、そのResultSetのカーソルは更新可能ではありません。

この節には以下の集約があります。