ORDER BY 子句
描述
ORDER BY 子句用于以用户指定的顺序以排序的方式返回结果行。与 SORT BY 子句不同,此子句保证输出的总顺序。
语法
ORDER BY { expression [ sort_direction | nulls_sort_order ] [ , ... ] }
参数
-
ORDER BY
指定一个以逗号分隔的表达式列表以及可选参数
sort_direction和nulls_sort_order,用于排序行。 -
sort_direction
可选地指定是否以升序或降序排序行。排序方向的有效值是
ASC表示升序 和DESC表示降序。如果没有明确指定排序方向,则默认情况下 行以升序排序。语法: [ ASC
|DESC ] -
nulls_sort_order
可选地指定NULL值是返回在非NULL值之前还是之后。如果
null_sort_order没有被指定,则如果排序顺序为ASC,NULL值首先排序;如果排序顺序为DESC,则NULL值最后排序。-
如果
NULLS FIRST被指定,则NULL值无论排序顺序如何都优先返回。 -
如果
NULLS LAST被指定,则NULL值无论排序顺序如何都最后返回。
语法:
[ NULLS { FIRST | LAST } ] -
如果
示例
CREATE TABLE person (id INT, name STRING, age INT);
INSERT INTO person VALUES
(100, 'John', 30),
(200, 'Mary', NULL),
(300, 'Mike', 80),
(400, 'Jerry', NULL),
(500, 'Dan', 50);
-- 按年龄排序。默认情况下,行按升序排序,NULL值优先。
SELECT name, age FROM person ORDER BY age;
+-----+----+
| name| age|
+-----+----+
|Jerry|null|
| Mary|null|
| John| 30|
| Dan| 50|
| Mike| 80|
+-----+----+
-- 以升序方式排序,其中NULL值排在最后。
SELECT name, age FROM person ORDER BY age NULLS LAST;
+-----+----+
| name| age|
+-----+----+
| John| 30|
| Dan| 50|
| Mike| 80|
| Mary|null|
|Jerry|null|
+-----+----+
-- 按年龄降序排序,默认情况下NULL排在最后。
SELECT name, age FROM person ORDER BY age DESC;
+-----+----+
| name| age|
+-----+----+
| Mike| 80|
| Dan| 50|
| John| 30|
|Jerry|null|
| Mary|null|
+-----+----+
-- 以升序方式排序,并将NULL值放在前面。
SELECT name, age FROM person ORDER BY age DESC NULLS FIRST;
+-----+----+
| name| age|
+-----+----+
|Jerry|null|
| Mary|null|
| Mike| 80|
| Dan| 50|
| John| 30|
+-----+----+
-- 基于多个列排序,每列具有不同的排序方向。
SELECT * FROM person ORDER BY name ASC, age DESC;
+---+-----+----+
| id| name| age|
+---+-----+----+
|500| Dan| 50|
|400|Jerry|null|
|100| John| 30|
|200| Mary|null|
|300| Mike| 80|
+---+-----+----+