↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 9.1 已结束支持。 2016-10-27. 请参阅 当前版本手册.

9.18. 聚合函数 #

聚合函数根据一组输入值计算出单个结果。内置聚合函数列于表 9.43和表 9.44。聚合函数的特殊语法说明见第 4.2.7 节。更多入门信息请参见第 2.7 节。

表 9.43. 通用聚合函数

函数参数类型返回类型描述
array_agg(expression)任意非数组类型参数类型的数组将输入值(包括 null)串接为数组
avg(expression)smallint、int、bigint、real、double precision、numeric 或 interval整数类型参数返回 numeric,浮点参数返回 double precision,其他情况与参数数据类型相同所有输入值的平均值(算术平均值)
bit_and(expression)smallint、int、bigint 或 bit与参数数据类型相同所有非空输入值的按位与;没有非空输入时为 null
bit_or(expression)smallint、int、bigint 或 bit与参数数据类型相同所有非空输入值的按位或;没有非空输入时为 null
bool_and(expression)boolbool所有输入值都为真时返回真,否则返回假
bool_or(expression)boolbool至少一个输入值为真时返回真,否则返回假
count(*) bigint输入行数
count(expression)任意bigintexpression 的值不为 null 的输入行数
every(expression)boolbool等价于 bool_and
max(expression)任意数值、字符串、日期/时间、网络或枚举类型,或这些类型的数组与参数类型相同所有输入值中 expression 的最大值
min(expression)任意数值、字符串、日期/时间、网络或枚举类型,或这些类型的数组与参数类型相同所有输入值中 expression 的最小值
string_agg(expression, delimiter) text,texttext将输入值串接为字符串,以分隔符分隔
sum(expression)smallint、int、bigint、real、double precision、numeric、interval 或 moneysmallint 或 int 参数返回 bigint,bigint 参数返回 numeric,其他情况与参数数据类型相同对所有输入值的 expression 求和
xmlagg(expression)xmlxml串接 XML 值(另见第 9.14.1.7 节)

需要注意,除了count之外,这些函数在没有选中任何行时都会返回空值。特别地,sum在没有输入行时返回空值,而不是预期中的零;array_agg在没有输入行时返回空值,而不是空数组。必要时,可以用coalesce函数把空值替换成零或空数组。

注意

布尔聚合bool_and和bool_or对应于标准 SQL 聚合every和any或some。至于any和some,标准语法似乎存在歧义:

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

此处的ANY既可以被视为引入一个子查询,也可以在该子查询返回一行布尔值时被视为聚合函数。因此,不能将标准名称用于这些聚合。

注意

习惯于其他 SQL 数据库管理系统的用户,可能会对count聚合用于整个表时的性能感到失望。如下查询:

SELECT count(*) FROM sometable;

将由PostgreSQL通过顺序扫描整个表来执行。

聚合函数array_agg、string_agg和xmlagg,以及类似的用户定义聚合函数,其结果值会随输入值的顺序发生实质性变化。默认情况下,输入顺序未指定,但可以在聚合调用中写入ORDER BY子句来控制,如第 4.2.7 节所示。也可以用已排序的子查询提供输入值,这通常也能奏效。例如:

SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;

但这种语法在 SQL 标准中是不允许的,并且不可移植到其他数据库系统。

表 9.44列出了统计分析常用的聚合函数。(将它们单独列出只是为了避免让更常用的聚合函数列表过于拥挤。)说明中提到的 N 表示所有输入表达式均非空的输入行数。在所有情况下,如果计算没有意义,例如 N 为零,都会返回空值。

表 9.44. 用于统计的聚合函数

函数参数类型返回类型描述
corr(Y, X)double precisiondouble precision相关系数
covar_pop(Y, X)double precisiondouble precision总体协方差
covar_samp(Y, X)double precisiondouble precision样本协方差
regr_avgx(Y, X)double precisiondouble precision自变量的平均值(sum(X)/N)
regr_avgy(Y, X)double precisiondouble precision因变量的平均值(sum(Y)/N)
regr_count(Y, X)double precisionbigint两个表达式都非空的输入行数
regr_intercept(Y, X)double precisiondouble precision由(X,Y)数值对确定的最小二乘拟合线性方程的 y 轴截距
regr_r2(Y, X)double precisiondouble precision相关系数的平方
regr_slope(Y, X)double precisiondouble precision由(X,Y)数值对确定的最小二乘拟合线性方程的斜率
regr_sxx(Y, X)double precisiondouble precisionsum(X^2) - sum(X)^2/N(自变量的“平方和”)
regr_sxy(Y, X)double precisiondouble precisionsum(X*Y) - sum(X) * sum(Y)/N(自变量与因变量的“乘积和”)
regr_syy(Y, X)double precisiondouble precisionsum(Y^2) - sum(Y)^2/N(因变量的“平方和”)
stddev(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numericstddev_samp 的历史别名
stddev_pop(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numeric输入值的总体标准差
stddev_samp(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numeric输入值的样本标准差
variance(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numericvar_samp 的历史别名
var_pop(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numeric输入值的总体方差(总体标准差的平方)
var_samp(expression)smallint、int、bigint、real、double precision 或 numeric浮点参数返回 double precision,其他情况返回 numeric输入值的样本方差(样本标准差的平方)

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.