集約 (集合関数)

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

Aggregatesand data types 組込みの集約は、にあるデータ型に作用させることができます。 組込みの集約にて可能なデータ型 全データ型 組込みの数値型 COUNT X X MIN X MAX X AVG X SUM X

Aggregatesrequirements for 集約は以下の文脈にのみ置くことができます。

  • 選択式選択項目
  • HAVING節
  • 集約がその問合せにあるならば、ORDER BY 節(別名を使う)つまり、選択式選択項目に集約がある場合に限り、集約への別名をORDER 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のカーソルは更新可能ではありません。

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