2.4. 行排序

在一个查询生成一个输出表之后(在处理完选择列表之后), 你还可以对它进行排序.如果没有选择排序,那么行将以随机 的顺序返回.这时候的实际顺序将取决于扫描和连接规划类型和 在磁盘上的顺序,但是肯定不能依赖这些东西.一定的顺序只能在 明确地使用了排序步骤之后才能保证.

ORDER BY 子句声明了排序顺序

SELECT select_list FROM table_expression ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...]
column1,等指向选择列表: 它可以是一个列的名字(可以是明确的列标签也可以是缺省名字, 象 Section 2.2.1 里解释的那样) 或者是一个列的数字.一些例子:
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 的扩展,Postgres 还允许对任意表达式进行排序:

SELECT a, b FROM table1 ORDER BY a + b;
还允许引用在选择列表中重命名的 FROM 子句中的列名字:
SELECT a AS b FROM table1 ORDER BY a;
但是这个特性在涉及 UNION,INTERSECT,或 EXCEPT 的查询中 是不能用的,而且也不可移植.

声明的每个列都可以跟着一个可选的 ASC 或 DESC 以设置排序方向. 缺省是 ASC.升序先输出小的数值,这里的“小”是以 < 操作符的角度定义的.类似的是, 降序是以 > 操作符来判断的.

如果声明了多于一个排序列,那么在前面的排序声明相等的情况下 使用后面的记录的进一步排序.