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

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 7.4 已结束支持。 请参阅 当前版本手册.

9.15. 聚合函数 #

聚合函数从一组输入值计算单个结果。表 9.43展示了内置的聚合函数。聚合函数的特殊语法注意事项在第 4.2.7 节中说明。更多入门信息请参见第 2.7 节。

表 9.43. 聚合函数

函数参数类型返回类型描述
avg(expression) smallint, integer, bigint, real, double precision, numeric, or interval 整数类型参数为numeric,浮点参数为double precision,否则与参数数据类型相同 所有输入值的平均值(算术平均)
count(*) bigint输入值的数目
count(expression)任意类型bigintexpression 的值不为 null 的输入行数
max(expression)任意数字、字符串或日期/时间类型与参数类型相同表达式在所有输入值中的最大值
min(expression)任意数字、字符串或日期/时间类型与参数类型相同表达式在所有输入值中的最小值
stddev(expression) smallint, integer, bigint, real, double precision, or numeric 浮点参数为 double precision,否则为 numeric输入值的样本标准差
sum(expression) smallint, integer, bigint, real, double precision, numeric, or interval smallint或integer参数为bigint,bigint参数为numeric,浮点参数为double precision,否则与参数数据类型相同 表达式在所有输入值上的总和
variance(expression) smallint, integer, bigint, real, double precision, or numeric 浮点参数为 double precision,否则为 numeric输入值的样本方差(样本标准差的平方)

应当注意,除了 count 之外,这些函数在没有选中任何行时都返回空值。特别地,没有行时 sum 返回空值,而不是人们可能预期的零。必要时可以使用 coalesce 函数把空值替换为零。

注意

习惯于其他 SQL 数据库管理系统的用户可能会对 PostgreSQL 中某些聚合函数在聚合应用于整个表(换句话说,没有指定 WHERE 子句)时的性能特征感到惊讶。特别地,像

SELECT min(col) FROM sometable;

这样的查询会被 PostgreSQL 用整个表的顺序扫描来执行。其他数据库系统可能会把这种形式的查询优化为使用该列上的索引(如果可用的话)。类似地,在 PostgreSQL 中,聚合函数 max() 和 count() 应用于整个表时也总是需要顺序扫描。

PostgreSQL无法轻易实现这种优化,因为它还允许用户定义的聚合查询。由于min()、max()和count()是用聚合函数的通用 API 定义的,因此没有为在某些情况下特殊处理这些函数的执行提供机制。

幸运的是,min() 和 max() 有一个简单的变通方法。下面显示的查询与上面的查询等价,只是如果所讨论的列上存在 B-tree 索引,它可以利用该索引。

SELECT col FROM sometable ORDER BY col ASC LIMIT 1;

类似的查询(把上面查询中的 ASC 替换为 DESC)可以用于代替 max())。

遗憾的是,没有类似的简单查询可以用来提高count()应用于整个表时的性能。

报告文档问题

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