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 子句中的字符串文本。