CREATE AGGREGATE

Name

CREATE AGGREGATE  --  新規の集約関数を定義します。

Synopsis

CREATE AGGREGATE name [ AS ]
    ( BASETYPE    = data_type
    [ , SFUNC1    = sfunc1
      , STYPE1    = sfunc1_return_type ]
    [ , SFUNC2    = sfunc2
      , STYPE2    = sfunc2_return_type ]
    [ , FINALFUNC = ffunc ]
    [ , INITCOND1 = initial_condition1 ]
    [ , INITCOND2 = initial_condition2 ]
    )
  

入力

name

作成する集約関数の名前です。

data_type

この集約関数が影響を及ぼす基準のデータ型です。

sfunc1

元となるカラムからそれぞれの非 NULL フィールドにたいし 呼び出される状態推移関数です。 最初の引数として、 sfunc1_return_type 型 の変数を取り、そのフィールドを第二の引数として取ります。

sfunc1_return_type

最初の推移関数の戻り型です。

sfunc2

元となるカラムからそれぞれの非 NULL フィールドにたいし 呼び出される状態推移関数です。 たった一つの引数として、 sfunc1_return_type 型 の変数をとり、同じ型の変数を戻します。

sfunc2_return_type

二番目の推移関数の戻り型です。

ffunc

すべての入力フィールドが考察されたあとに呼ばれる最終の関数です。 この関数は sfunc1_return_typesfunc2_return_type の二つの型の引数を取らなければなりません。

initial_condition1

最初の推移関数の引数の初期値です。

initial_condition2

二番目の推移関数の引数の初期値です。

出力

CREATE

コマンドが正常に終了したときに戻るメッセージです。

説明

CREATE AGGREGATE は、ユーザまたはプログラマが 新規の集約関数を定義するこで Postgres の 機能を拡張できるようにします。 min(int4)avg(float8) と いったいくつかの基本型用の集約関数は基本の配布物として提供されて います。新しい型を定義したい場合とか、用意されていない集約関数が 必要になった時には、CREATE AGGREGATE によって 欲しい機能を実現することができます。

一つの集約関数には、最大で3つの関数を持つことができます。 内 2 つは状態推移関数である、次の sfunc1sfunc2 です。

sfunc1( internal-state1, next-data_item ) ---> next-internal-state1 sfunc2( internal-state2 ) ---> next-internal-state2
   
そして最後の 1 つは、演算関数
ffunc(internal-state1, internal-state2) ---> aggregate-value
   
となります。

Postgres は (ここでは temp1temp2 になっている) 推移関数に対する引数として使用する中間結果を保持する最大 2 つの暫定 変数を生成します。

これらの推移関数には以下の特性が必要です。

また、集約関数はそれぞれの推移関数に対して 1 つづつ、全体として1 つ または 2 つの初期条件が必要なことがあります。これらはデータベースで型 text のフィールドとして指定され、記憶されます。

注意事項

集約関数を削除するのには、 DROP AGGREGATE を使用します。

状態関数と最終関数の組合せが異なる集約関数を指定することが できます。 例えば、count 集約は SFUNC1 または FINALFUNC ではなく(増分関数である) SFUNC2 を必要とします。 一方、 sum 集約は SFUNC2 または FINALFUNC ではなく(加算関数である) SFUNC1 を必要とし、avg 集約は結果を引き出すのに、上記 2 つの関数と(除算関数である) FINALFUNC を必要とします。いずれの場合においても、最低 1 つの 状態関数を定義する必要があり、全ての SFUNC2 は、それに相応する INITCOND2 がなければなりません。

使用法

集約関数に関しての完備した事例と使用法については PostgreSQL プログラマガイドの 集約関数の章を参照して下さい。

互換性

SQL92

CREATE AGGREGATEPostgres の拡張言語です。 SQL92 には CREATE AGGREGATE はありません。