ORDER BY 子句 - Amazon Redshift

ORDER BY 子句

ORDER BY 子句对查询的结果集进行排序。

语法

[ ORDER BY expression [ ASC | DESC ] ] [ NULLS FIRST | NULLS LAST ] [ LIMIT { count | ALL } ] [ OFFSET start ]

参数

expression

一个表达式,通常情况下通过指定选择列表中的一个或多个列,来定义查询结果集的排序顺序。根据二进制 UTF-8 排序方式返回结果。您也可以指定:

  • 未在选择列表中的列

  • 由查询引用的表中存在的一个或多个列构成的表达式

  • 表示选择列表条目的位置(如果不存在选择列表,则为表中列的位置)的序号

  • 定义选择列表条目的别名

当 ORDER BY 子句包含多个表达式时,将根据第一个表达式对结果集进行排序,然后将第二个表达式应用于具有第一个表达式中的匹配值的行,以此类推。

ASC | DESC

一个定义表达式的排序顺序的选项,如下所示:

  • ASC:升序(例如,按数值的从低到高的顺序和字符串的从 A 到 Z 的顺序)。如果未指定选项,则默认情况下将按升序对数据进行排序。

  • DESC:降序(按数值的从高到低的顺序和字符串的从 Z 到 A 的顺序)。

NULLS FIRST | NULLS LAST

一个选项,指定是应将 NULL 值排在最前(位于非 null 值之前)还是排在最后(位于非 null 值之后)。默认情况下,按 ASC 顺序最后对 NULL 值进行排序和排名,按 DESC 顺序首先对 NULL 值进行排序和排名。

LIMIT number | ALL

一个选项,用于控制查询返回的排序行的数目。LIMIT 数字必须为正整数;最大值为 2147483647

LIMIT 0 不返回任何行。可以使用此语法进行测试:检查查询运行(不显示任何行)或返回表中列的列表。如果使用 LIMIT 0 返回列的列表,则 ORDER BY 子句是多余的。默认值为 LIMIT ALL。

OFFSET start

一个选项,指定在开始返回行之前跳过 start 前的行数。OFFSET 数字必须为正整数;最大值为 2147483647。在与 LIMIT 选项结合使用时,将先跳过 OFFSET 行,然后再开始计算返回的 LIMIT 行数。如果不使用 LIMIT 选项,则结果集中的行数会减少跳过的行数。仍必须扫描 OFFSET 子句跳过的行,因此使用较大的 OFFSET 值可能会非常低效。

使用说明

请注意,使用 ORDER BY 子句时预期会发生以下行为:

  • NULL 值被视为“高于”所有其他值。对于默认的升序排序顺序,NULL 值将排在最后。要更改此行为,请使用 NULLS FIRST 选项。

  • 当查询不包含 ORDER BY 子句时,系统将返回具有不可预测的行顺序的结果集。同一查询执行两次可能会返回具有不同顺序的结果集。

  • 可在不使用 ORDER BY 子句的情况下使用 LIMIT 和 OFFSET 选项;不过,要返回一致的行集,请将这两个选项与 ORDER BY 子句结合使用。

  • 在任何并行系统(例如 Amazon Redshift)中,当 ORDER BY 不生成唯一排序时,行的顺序是不确定的。也就是说,如果 ORDER BY 表达式生成重复值,则这些行的返回顺序可能会因系统或 Amazon Redshift 运行而异。

  • Amazon Redshift 不支持 ORDER BY 子句中的字符串文本。