
# ORDER BY
#### 功能描述
ORDER BY子句用于对查询结果进行全局排序。Spark 4.0增强了排序功能，支持NULLS FIRST/LAST指定NULL值排序位置，并可与OFFSET配合实现分页。
#### 语法格式
```
SELECT projectItem [, ...] FROM table_reference
   ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] } [, ...]
```
#### 参数说明
| 参数          | 说明                                              |
|:---|:---|
| expression  | 排序表达式，可以是列名、列别名或表达式。                            |
| ASC         | 升序排序，为默认选项。                                     |
| DESC        | 降序排序。                                           |
| NULLS FIRST | 将NULL值排在排序结果的最前面。                               |
| NULLS LAST  | 将NULL值排在排序结果的最后面。默认情况下，升序时NULL排在最后，降序时NULL排在最前。 |
   
#### 注意事项
- ORDER BY执行全局排序，所有数据会汇聚到一个Reducer中处理。
- 与GROUP BY一起使用时，ORDER BY后面可以跟聚合函数。
- ORDER BY可以引用SELECT列表中的别名。
- 可与LIMIT和OFFSET配合实现分页查询。
 
#### 示例
按单列升序排序：
```
SELECT * FROM student ORDER BY score;
```
按单列降序排序：
```
SELECT * FROM student ORDER BY score DESC;
```
按多列排序：
```
SELECT * FROM student ORDER BY class_id ASC, score DESC;
```
指定NULL值排序位置：
```
SELECT * FROM student ORDER BY score DESC NULLS LAST;
```
使用列别名排序：
```
SELECT name, score * 1.5 AS weighted_score FROM student   ORDER BY weighted_score DESC;
```
分页查询（与OFFSET配合，Spark 4.0）：
```
SELECT * FROM student ORDER BY score DESC LIMIT 10 OFFSET 20;
```
