| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
CREATE AGGREGATE ─ 定義一個新的聚集函數
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 ] )
CREATE AGGREGATE 允許用戶或程式員通過定義新的聚集函數來擴展 Postgres 的功能。一些用於基本型態的聚集函數如 min(int4) 和 avg(float8) 等已經包含在軟件裡。如果你需要定義一個新型態或需要一個還沒有提供的聚集函數,這時便可用CREATE AGGREGATE 來提供我們所需要的特性。
一個聚集函數最多可能需要三個函數,兩個狀態轉換函數, sfunc1 和 sfunc2:
sfunc1( internal-state1, next-data_item ) ---> next-internal-state1 sfunc2( internal-state2 ) ---> next-internal-state2
和一個最終計算函數,ffunc:
ffunc(internal-state1, internal-state2) ---> aggregate-valuePostgres 最多可以創建兩個臨時變數(在這裡是 temp1 和temp2)用於保存被轉換函數作為參數的中間結果。
這些轉換函數要求具有下面屬性:
一個聚集函數可能還要求一個或兩個初始條件,每個轉換函數一個。這些都以型態text 聲明和儲存在資料庫裡。
使用 DROP AGGREGATE 刪除聚集函數。
聲明的聚集函數有可能有各種各樣不同的狀態和終處理函數組成。比如,count 聚集需要 SFUNC2 (一個遞增函數)但不需要 SFUNC1 或 FINALFUNC,而 sum 聚集需要 SFUNC1 (一個累加函數)但不需要 SFUNC2 或 FINALFUNC 而 avg 聚集需要上面所有狀態函數和一個 FINALFUNC (一個除法函數)來計算結果。在任何情況下,至少要定義一個狀態函數,而且任何 SFUNC2 都有一個對應的 INITCOND2。
請參考 PostgreSQL 程式員手冊 聚集函數章節的聚集函數部分獲取完整的例子。
CREATE AGGREGATE 是 Postgres 語言的擴展。在 SQL92 裡沒有 CREATE AGGREGATE 。
| 上一頁 | 首頁 | 下一頁 |
| COPY | 開頭 | CREATE DATABASE |