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