Provided by:
manpages-zh_1.5-1_all 
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條件,也就是說,所用的該內部狀態漯鴝lC
這蚧是作為一蚚型為 text 的字段存儲在數據庫裏的, 不過它怚眸楓O狀態-
矞型的合法的外部表現形式的常量。 如果沒有提供狀態,那麼狀態-
鴝l化為 NULL。
如果該狀態轉換函數被定義為 "strict", 那麼就不能用 NULL 輸入調用它。這-
荇尕,帶有這樣的轉換函數的聚集執行起來的現象如下所z。 NULL 輸入的-
Q忽略(不調用此函數並且保留前一茠牯A^。如果初始狀態O
NULL,那麼由第一茷D NULL 懂姜茠牯AA 而狀態轉換函數從第二茷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當前輸入數據條目,而返回下茠牯AC
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>