提示
Spark SQL 教程 正在筹划编写中,使用过程中有任何建议,提供意见、建议、纠错、催更加微信 gairuo123。
ORDER BY 子句用于按用户指定的顺序以排序方式返回结果行。与 SORT BY 子句不同,这个子句保证输出的总顺序。
ORDER BY 子句的语法为:
ORDER BY { expression [ sort_direction | nulls_sort_order ] [ , ... ] }
可用的参数用:
指定以逗号分隔的表达式列表,以及用于对行进行排序的可选参数 sort_direction 和nulls_sort_order。
可选,指定是按升序还是降序对行进行排序。排序方向的有效值是 ASC(升序)和 DESC(降序)。如果未明确指定排序方向,则默认情况下,行按升序排序。
语法: [ ASC | DESC ]
可选,指定是否在非空值之前/之后返回空值。如果未指定 null_sort_order,则如果排序顺序为 ASC,则首先为 null 排序;如果排序顺序为 DESC,则最后为 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|
+-----+----+
-- 以升序方式对行进行排序,将空值保留在最后
SELECT name, age FROM person ORDER BY age NULLS LAST;
+-----+----+
| name| age|
+-----+----+
| John| 30|
| Dan| 50|
| Mike| 80|
| Mary|null|
|Jerry|null|
+-----+----+
-- 按年龄降序排列行,最后默认为空
SELECT name, age FROM person ORDER BY age DESC;
+-----+----+
| name| age|
+-----+----+
| Mike| 80|
| Dan| 50|
| John| 30|
|Jerry|null|
| Mary|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|
+---+-----+----+
更新时间:2021-07-29 23:10:55 标签:spark sql orderby