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