- 类别:
ORDER BY¶
从 SELECT 列表中指定结果表的行的排序方式。
语法¶
SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
其中:
orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
参数¶
{ ASC | DESC }
可以按升序(从低到高)或降序(从高到低)返回排序键的值。
默认:
ASC
NULLS { FIRST | LAST }
可以根据排序顺序(
ASC
或DESC
),指定 NULL 值是在非 NULL 值之前还是之后返回。默认值:取决于排序顺序(
ASC
或DESC
);有关详细信息,请参阅下面的使用说明
使用说明¶
所有数据都根据 ASCII 表中每个字符的数字字节值进行排序。支持 UTF-8 编码。
对于数值,小数点前的前导零和小数点后的尾随零 (
0
) 对排序顺序没有影响。除非另有说明,否则 NULL 值被视为高于任何非 NULL 值。因此, NULLS 的排序取决于排序顺序:
如果排序顺序为
ASC
,则最后返回 NULLS ;若要强制首先返回 NULLS,请使用NULLS FIRST
。如果排序顺序为
DESC
,则首先返回 NULLS;若要强制最后返回 NULLS,请使用NULLS LAST
。
对于 半结构化 数据中不同数据类型的值,例如包含不同数据类型元素的数组,排序顺序不能保证一致。
Top-K 修剪可以提高同时包含 LIMIT 和 ORDER BY 子句的查询的性能。有关更多信息,请参阅 用于提高查询性能的 Top-K 修剪。
ORDER BY 可以在查询中的不同级别使用,例如在子查询或 OVER() 分子句中。子查询或分子句中的 ORDER BY 仅在该子查询或分子句中应用。例如,以下查询中的 ORDER BY 只在子查询中而不在查询的最外层对结果进行排序:
SELECT * FROM ( SELECT branch_name FROM branch_offices ORDER BY monthly_sales DESC LIMIT 3 );
在该示例中,在子查询中指定 ORDER BY,因此子查询按月销售额的顺序返回名称。子查询中的 ORDER BY 不适用于外部查询。此查询返回月销售额排名前三的三个分支机构的名称,但不一定按月销售额排序。
排序的开销可能很高。如果希望对外部查询的结果进行排序,请仅在查询的顶层使用
ORDER BY
子句,而且,除非必要,否则应避免在子查询中使用ORDER BY
子句。
示例¶
字符串的排序顺序示例:
SELECT column1
FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%')
ORDER BY column1;
+---------------+
| COLUMN1 |
|---------------|
| this |
| % |
| & |
| 01 |
| 05 |
| 1 |
| 2 |
| B |
| a |
| this |
| this and that |
| NULL |
+---------------+
数字的排序顺序示例:
SELECT column1
FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000)
ORDER BY column1;
+---------+
| COLUMN1 |
|---------|
| 0.05 |
| 0.50 |
| 0.50 |
| 1.00 |
| 2.00 |
| 3.00 |
| 4.00 |
| 5.00 |
| 5.00 |
| 6.00 |
| NULL |
+---------+
NULL 值的排序顺序示例:
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1;
+---------+
| COLUMN1 |
|---------|
| 1 |
| 2 |
| 3 |
| NULL |
| NULL |
+---------+
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 NULLS FIRST;
+---------+
| COLUMN1 |
|---------|
| NULL |
| NULL |
| 1 |
| 2 |
| 3 |
+---------+
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC;
+---------+
| COLUMN1 |
|---------|
| NULL |
| NULL |
| 3 |
| 2 |
| 1 |
+---------+
SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC NULLS LAST;
+---------+
| COLUMN1 |
|---------|
| 3 |
| 2 |
| 1 |
| NULL |
| NULL |
+---------+