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

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 8.0 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

7.5. 行排序 #

当一个查询生成输出表之后(也就是处理完选择列表之后),还可以选择对其排序。如果没有选择排序,行将按未指定的顺序返回。这时的实际顺序取决于扫描和连接计划类型以及磁盘上的物理顺序,但绝不能依赖这些因素。只有显式选择排序步骤,才能保证特定的输出顺序。

ORDER BY子句指定了排序顺序:

SELECT select_list
    FROM table_expression
    ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...]

column1等引用选择列表中的列。它们既可以是列的输出名(见第 7.3.2 节),也可以是列的编号。一些例子:

SELECT a, b FROM table1 ORDER BY a;
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, sum(b) FROM table1 GROUP BY a ORDER BY 1;

作为对 SQL 标准的一个扩展,PostgreSQL还允许按任意表达式排序:

SELECT a, b FROM table1 ORDER BY a + b;

也允许引用FROM子句中未出现在选择列表里的列名:

SELECT a FROM table1 ORDER BY b;

但是这些扩展在涉及UNION、INTERSECT或EXCEPT的查询中不起作用,而且不能移植到其他 SQL 数据库。

每个列指定后面都可以选择性地写上ASC或DESC,以指定升序或降序排序方向。ASC是默认值。升序会把较小的值排在前面,而“较小”是由<操作符定义的。类似地,降序则由>操作符定义。 [4]

如果指定了多个排序列,那么后面的项将用于对那些在前面排序列所施加的顺序下相等的行继续排序。



[4] 事实上,PostgreSQL会使用该列数据类型的默认 B-树操作符类来决定ASC和DESC的排序顺序。按惯例,数据类型会被设置成由<和>操作符来对应这种排序顺序,不过用户定义数据类型的设计者也可以选择不同的做法。

提交更正

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