PostgreSQL
上一頁   下一頁

CREATE AGGREGATE

名稱

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 ] )
  

輸入

name
要創建的聚集函數名。
data_type
本聚集函數要處理的基本數據型態。
sfunc1
用於處理源數據列裡的每一個非空(non-NULL)數據的狀態轉換函數。它以型態變數 sfunc1_return_type 作為第一個參數,該域為第二個參數。
sfunc1_return_type
第一個轉換函數的返回型態。
sfunc2
用於處理源數據列裡的每一個非空(non-NULL)數據的狀態轉換函數。它以型態變數 sfunc2_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 來提供我們所需要的特性。

一個聚集函數最多可能需要三個函數,兩個狀態轉換函數, sfunc1sfunc2:

sfunc1( internal-state1, next-data_item ) ---> next-internal-state1 sfunc2( internal-state2 ) ---> next-internal-state2
   

和一個最終計算函數,ffunc:

ffunc(internal-state1, internal-state2) ---> aggregate-value
   
Postgres 最多可以創建兩個臨時變數(在這裡是 temp1temp2)用於保存被轉換函數作為參數的中間結果。

這些轉換函數要求具有下面屬性:

一個聚集函數可能還要求一個或兩個初始條件,每個轉換函數一個。這些都以型態text 聲明和儲存在資料庫裡。

注意

使用 DROP AGGREGATE 刪除聚集函數。

聲明的聚集函數有可能有各種各樣不同的狀態和終處理函數組成。比如,count 聚集需要 SFUNC2 (一個遞增函數)但不需要 SFUNC1 或 FINALFUNC,而 sum 聚集需要 SFUNC1 (一個累加函數)但不需要 SFUNC2 或 FINALFUNC 而 avg 聚集需要上面所有狀態函數和一個 FINALFUNC (一個除法函數)來計算結果。在任何情況下,至少要定義一個狀態函數,而且任何 SFUNC2 都有一個對應的 INITCOND2。

用法

請參考 PostgreSQL 程式員手冊 聚集函數章節的聚集函數部分獲取完整的例子。

兼容性

SQL92

CREATE AGGREGATE 是 Postgres 語言的擴展。在 SQL92 裡沒有 CREATE AGGREGATE


上一頁 首頁 下一頁
COPY 開頭 CREATE DATABASE