Provided by: manpages-zh_1.5-1_all bug

NAME

       CREATE AGGREGATE - 定義一虓s的聚集函數

SYNOPSIS

       CREATE AGGREGATE name (
           BASETYPE = input_data_type,
           SFUNC = sfunc,
           STYPE = state_data_type
           [ , FINALFUNC = ffunc ]
           [ , INITCOND = initial_condition ]
       )

DESCRIPTIONyz
       CREATE   AGGREGATE  定義一虓s的聚集函數。  一些用於基本類型的聚集函數如
       min(integer)  和  avg(double   precision)    等已經包含在基礎套件裏了。
       如果你需n定義一虓s類型或需n一蚆晲S有提供的聚集函數,這時便可用   CREATE
       AGGREGATE 來提供我怍珨愯的特性。

       如果給出了一蚍狾〞漲W字(比如,CREATE     AGGREGATE      myschema.myagg
       ...),那麼該聚集函數是在指定模式中創建的。
       否則它是在當前模式中創建的。

       一蚖E集函數是用它的名字和輸入數據類型來標識的。       同一模式中如果兩-
       蚖E集處理的輸入數據不同,它怚i以有相同的名字。                      一-
       蚖E集函數的輸入數據類型必須和所有同一模式中的普通函數的名字和輸入類型不同。

       一蚖E集函數是用一茤峔瑧普通函數做成的:  一茠牯A轉換函數  sfunc,  和一-
       茈i選的終p算函數 ffunc. 它怓O這樣使用的:

       sfunc( internal-state, next-data-item ) ---> next-internal-state
       ffunc( internal-state ) ---> aggregate-value

       PostgreSQL       創建一蚚型為       stype的臨時變量。        它保存這-
       蚖E集的當前內部狀態。     對於每蚇擗J數據條目,     都調用狀態轉換函數-
       p算內部狀態熒s數C       在處理完所有數據後,調用一次最終處理函數以-
       p算聚集的返回C 如果沒有最終處理函數,那麼將最後的狀態禨答藀^C

       一蚖E集函數還可能提供一茠鴝l條件,也就是說,所用的該內部狀態漯鴝lC
       這蚧是作為一蚚型為  text  的字段存儲在數據庫裏的,  不過它怚眸楓O狀態-
       矞型的合法的外部表現形式的常量。       如果沒有提供狀態,那麼狀態-
       鴝l化為 NULL。

       如果該狀態轉換函數被定義為 "strict", 那麼就不能用 NULL 輸入調用它。這-
       荇尕,帶有這樣的轉換函數的聚集執行起來的現象如下所z。    NULL   輸入的-
       Q忽略(不調用此函數並且保留前一茠牯A^。如果初始狀態O
       NULL,那麼由第一茷D  NULL  懂姜茠牯AA  而狀態轉換函數從第二茷D NULL
       的輸入}始調用。這樣做讓我怳騆容易實現象       max       這樣的聚集。
       請注意這種行為只是當    state_type    與   input_data_type    相同的時-
       啎~表現出來。          如果這些類型不同,你必須提供一茷D           NULL
       的初始條件或者使用一茷Dstrice的狀態轉換函數。

       如果狀態轉換函數不是    strict(嚴格)的,   那麼它將無條件地為每蚇擗J-
       掍峞A     並且必須自行處理     NULL     輸入和      NULL      轉換A
       這樣就允許聚集的作者對聚集中的空釦馴的控制。

       如果終轉換函數定義為"strict",則如果最終狀態O  NULL  時就不會調用它;
       而是自動輸出一粍ULL的結果。(當然,這才是   strict   函數的正常特征。)
       不管是那種情況,終處理函數可以選擇返回         NULL。比如,         avg
       的終處理函數在零輸入記錄時就會返回 NULL。

PARAMETERS數
       name   n創建的聚集函數名(可以有模式袡◥滿^。

       input_data_type
              本聚集函數n處理的基本數據類型。
              對於不檢查輸入類型的聚集來說,這荌捊i以聲明為"ANY"。    (比如
              count(*))。

       sfunc  用於處理源數據列裏的每一蚇擗J數據的狀態轉換函數名稱。
              它通常是一蚋飌捊漕蝻A第一荌捊疑型是       state_data_type
              而第二荌捊疑型是        input_data_type.        另外,對於一-
              茪邠d輸入數據的聚集,該函數只接受一蚚型為     state_data_type
              的參數。                  不管是種情況,此函數必須返回一蚚型為
              state_data_type的C                        這茖蝻筐當前狀態-
              M當前輸入數據條目,而返回下茠牯AC

       state_data_type
              聚集的狀態獐矞型。

       ffunc  在轉換完所有輸入域/字段後調用的最終處理函數。它p算聚集的結果。
              此函數必須接受一蚚型為         state_data_type         的參數。
              聚集的輸出數據類型被定義為此函數的返回類型。 如果沒有聲明  ffunc
              則使用聚集結果的狀態@為聚集的結果,而輸出類型為
              state_data_type。

       initial_condition
              狀態漯鴝l設置(^。它必須是一蚍矞型        state_data_type
              可以接受的文本常量C 如果沒有聲明,狀態鴝l為 NULL。

       CREATE AGGREGATE 的參數可以以任何順序書寫,而不只是上掬膆靰熄陽C

EXAMPLESl
       參閱 ``User-defined Aggregates''

COMPATIBILITYe性
       CREATE  AGGREGATE  是  PostgreSQL 語言的擴展。 在 SQL 標準裏沒有 CREATE
       AGGREGATE。

SEE ALSO見
       ALTER     AGGREGATE      [alter_aggregate(7)],      DROP      AGGREGATE
       [drop_aggregate(l)]

者
       Postgresql  <laser@pgsqldb.org>