pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
聚合函数从一组输入值计算单个结果。表 9.43展示了内置的聚合函数。 聚合函数的特殊语法注意事项在第 4.2.7 节中说明。更多入门信息请参见第 2.7 节。
表 9.43. 聚合函数
应当注意,除了 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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。