# 7.5.排序行(订购人)

查询生成输出表后(在处理选择列表后),可以选择对其进行排序。如果未选择排序,则将以未指定的顺序返回行。这种情况下的实际顺序将取决于扫描和连接计划类型以及磁盘上的顺序,但不能依赖它。只有明确选择了排序步骤,才能保证特定的输出顺序。

这个订购人子句指定排序顺序:

SELECT select_list
    FROM table_expression
    ORDER BY sort_expression1 [ASC | DESC] [NULLS { FIRST | LAST }]
             [, sort_expression2 [ASC | DESC] [NULLS { FIRST | LAST }] ...]

排序表达式可以是查询的选择列表中有效的任何表达式。例如:

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

当指定多个表达式时,后面的值用于根据前面的值对相等的行进行排序。每个表达式后面都可以跟一个可选的ASC描述关键字将排序方向设置为升序或降序。ASC顺序是默认的。升序将较小的值放在第一位,其中“较小”是根据<操作人员同样,降序是由>操作人员[6]

这个先空最后为空选项可用于确定在排序顺序中,空值是出现在非空值之前还是之后。默认情况下,空值排序时好像大于任何非空值;就是,先空是的默认值描述秩序,以及最后为空否则

请注意,每个排序列的排序选项都是独立考虑的。例如按x,y顺序描述方法由x ASC、y DESC订购,这与订单由x描述,y描述.

A.*排序表达式*也可以是输出列的列标签或编号,如:

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

它们都按第一个输出列排序。请注意,输出列名必须是独立的,也就是说,它不能在表达式中使用——例如,这是对的:

SELECT a + b AS sum, c FROM table1 ORDER BY sum + c;          -- wrong

这种限制是为了减少歧义。如果订购人item是一个简单的名称,可以匹配输出列名或表表达式中的列。在这种情况下使用输出列。如果您使用重命名输出列以匹配其他表列的名称。

订购人可以应用于协会, 横断除了组合,但在这种情况下,只允许按输出列名或数字排序,而不允许按表达式排序。