©
This document usesPHP Chinese website manualRelease
从一组输入值里计算一个结果。表Table 9-42和表Table 9-43显示了内建的聚集函数。 聚集函数的特殊语法在Section 4.2.7里解释。请参考Section 2.7获取额外的介绍性信息
Table 9-42. 通用聚合函数
函数 | 参数类型 | 返回类型 | 描述 |
---|---|---|---|
array_agg(expression) |
any | 参数类型的数组 | 输入值,包括空,连接到一个数组 |
avg(expression) |
smallint,int,bigint,real,double precision,numeric, orinterval | 对于任何整数类型输入,结果都是numeric类型。 对于任何浮点输入,结果都是double precision类型。否则和输入数据类型相同。 | 所有输入值的均值(算术平均) |
bit_and(expression) |
smallint,int,bigint, orbit | 与参数数据类型相同 | 所有非 NULL 输入值的按位与(AND),如果全部输入值皆为 NULL ,那么结果也为 NULL |
bit_or(expression) |
smallint,int,bigint, orbit | 与参数数据类型相同 | 所有非 NULL 输入值的按位或(OR),如果全部输入值皆为 NULL ,那么结果也为 NULL |
bool_and(expression) |
bool | bool | 如果所有输入值都是真,则为真,否则为假。 |
bool_or(expression) |
bool | bool | 如果至少有一个输入值为真,则为真,否则为假。 |
count(*) |
bigint | 输入行数 | |
count(expression) |
any | bigint | 计算所有输入行中满足expression不为 NULL 的行数 |
every(expression) |
bool | bool | 等效于bool_and |
max(expression) |
any array, numeric, string, or date/time type | 和参数数据类型相同 | 所有输入行中expression的最大值 |
min(expression) |
any array, numeric, string, or date/time type | 和参数数据类型相同 | 所有输入行中expression的最小值 |
string_agg(expression,delimiter) |
text,text | text | 输入串联成一个字符串值,由分隔符分隔 |
sum(expression) |
smallint,int,bigint,real,double precision,numeric, orinterval | 对于smallint或int输入,输出类型为bigint。对于bigint输入, 输出类型为numeric, 对于浮点数输入,输出类型为double precision。否则和输入数据类型相同。 | 所有输入行的expression总和。 |
xmlagg(expression) |
xml | xml | 连接XML值(也可以参阅Section 9.14.1.7) |
请注意,除了count
以外,这些函数在没有输入行时返回 NULL 。 尤其要指出的是sum
函数在没有输入行时返回 NULL ,而不是零。 必要时可以用coalesce
把 NULL 替换成零。
Note:
bool_and
和bool_or
布尔聚合对应标准的 SQL 聚合every
和any
或some
。 对于any
和some
,标准语法里面似乎有些内置的歧义:SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;这里的
ANY
既可以被认为是引出一个子查询,也可以被认为是一个 聚合函数(如果查询表达式返回1行的话)。因此标准的名字无法用于这些聚合。
Note:当
count
聚合应用到整表,习惯了其它SQL数据库管理系统的用户可能会感到失望对它的性能表现。 一个类似下面这样的查询:SELECT count(*) FROM sometable;PostgreSQL将顺序全表扫描执行。
聚合函数array_agg
,string_agg
, 和xmlagg
,类似用户定义的聚合函数,根据输入的值的顺序 产生有意义不同的结果值。这个顺序默认没有指定,但是可以通过在聚合函数调用时, 写一个ORDER BY子句来控制,显示在Section 4.2.7。 另外,提供从一个已排序的子查询的输入值通常会工作。例如:
SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;
但此语法在SQL标准里不允许,不能移植到其它数据库系统。
Table 9-43显示了用于统计分析的聚合函数。 (单独列出这些函数仅仅是为了避免和那些经常使用的聚集函数混在一起而已。) "描述"列中的N表示所有输入行中 使得输入表达式不为 NULL 的行数。总的来说,如果计算本身变得没有意义,那么返回值将是 NULL 。 例如当N为零的时候。
Table 9-43. 统计聚合函数
函数 | 参数类型 | 返回类型 | 描述 |
---|---|---|---|
corr(Y,X) |
double precision | double precision | 相关系数 |
covar_pop(Y,X) |
double precision | double precision | 总体协方差 |
covar_samp(Y,X) |
double precision | double precision | 样本协方差 |
regr_avgx(Y,X) |
double precision | double precision | 自变量的平均值 (sum(X)/N) |
regr_avgy(Y,X) |
double precision | double precision | 因变量的平均值 (sum(X)/N)。 |
regr_count(Y,X) |
double precision | bigint | 两个表达式都不为 NULL 的输入行数 |
regr_intercept(Y,X) |
double precision | double precision | 根据所有输入的点(X,Y)按照最小二乘法拟合成一个线性方程, 然后返回该直线的 Y 轴截距 |
regr_r2(Y,X) |
double precision | double precision | 相关系数的平方 |
regr_slope(Y,X) |
double precision | double precision | 根据所有输入的点(X,Y) 按照最小二乘法拟合成一个线性方程,然后返回该直线的斜率。 |
regr_sxx(Y,X) |
double precision | double precision | sum(X^2) - sum(X)^2/N("sum of squares"of the independent variable) |
regr_sxy(Y,X) |
double precision | double precision | sum(X*Y) - sum(X) * sum(Y)/N("sum of products"of independent times dependent variable) |
regr_syy(Y,X) |
double precision | double precision | sum(Y^2) - sum(Y)^2/N("sum of squares"of the dependent variable) |
stddev(expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | stddev_samp 的别名(历史原因) |
stddev_pop(expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | 总体标准差 |
stddev_samp(expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | 样本标准差 |
variance (expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | var_samp 的别名(历史原因) |
var_pop (expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | 总体方差(总体标准差的平方) |
var_samp (expression) |
smallint,int,bigint,real,double precision, ornumeric | 对于浮点类型的输入返回double precision,其它输入返回numeric。 | 样本方差(样本标准差的平方) |