↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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) 任意类型 bigint expression 的值不为 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()应用于整个表时的性能。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。