ORDER BY 子句
適用於:Databricks SQL Databricks Runtime
以使用者指定的順序,以排序方式傳回結果數據列。 不同於 SORT BY 子句,這個子句保證輸出中的總順序。
語法
ORDER BY { { ALL [ sort_direction] [ nulls_sort_oder ] } |
{ expression [ sort_direction ] [ nulls_sort_oder ] } [, ...] }
sort_direction
[ ASC | DESC ]
nulls_sort_order
[ NULLS FIRST | NULLS LAST ]
Parameters
ALL
適用於: Databricks SQL Databricks Runtime 12.2 LTS 和更新版本
與指定
SELECT
list 中所有表達式的順序相等的速記。 如果sort_direction
或nulls_sort_order
已指定,則會套用至每個表達式。-
任何用來建立傳回結果順序之型別的表達式。
如果表達式是一個 INT 型別的常量值,則會被解釋為 selectlist中的 column 位置。
sort_direction
依表達式指定順序的排序順序。
-
ASC
:此表達式的排序方向為遞增。 -
DESC
:此表達式的排序順序為遞減。
如果未明確指定排序方向,則預設數據列會以遞增方式排序。
-
nulls_sort_order
可選地指定是否在非 NULL values之前或之後返回 NULL values。 如果未
null_sort_order
指定 ,則如果排序順序為 ,則 NULL 會先排序,如果排序順序為ASC
DESC
,則為 NULLS 排序最後一次。-
NULLS FIRST
:不論排序順序為何,都會先傳回NULL values。 -
NULLS LAST
:不論排序順序為何,NULL 和 values 都會最後傳回。
-
指定多個表達式排序時,會由左至右進行。 所有數據列都會依第一個表達式排序。 如果第一個運算式中有重複的 values,則會使用第二個運算式來決定重複項目群組內的順序。 如果排序表達式中存在重複的 values,則結果順序將不確定。
範例
> 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);
-- Sort rows by age. By default rows are sorted in ascending manner with NULL FIRST.
> SELECT name, age FROM person ORDER BY age;
Jerry NULL
Mary NULL
John 30
Dan 50
Mike 80
-- Sort rows in ascending manner keeping null values to be last.
> SELECT name, age FROM person ORDER BY age NULLS LAST;
John 30
Dan 50
Mike 80
Mary NULL
Jerry NULL
-- Sort rows by age in descending manner, which defaults to NULL LAST.
> SELECT name, age FROM person ORDER BY age DESC;
Mike 80
Dan 50
John 30
Jerry NULL
Mary NULL
-- Sort rows in ascending manner keeping null values to be first.
> SELECT name, age FROM person ORDER BY age DESC NULLS FIRST;
Jerry NULL
Mary NULL
Mike 80
Dan 50
John 30
-- Sort rows based on more than one column with each column having different
-- sort direction.
> SELECT * FROM person ORDER BY name ASC, age DESC;
500 Dan 50
400 Jerry NULL
100 John 30
200 Mary NULL
300 Mike 80
-- Sort rows based on all columns in the select list
> SELECT * FROM person ORDER BY ALL ASC;
100 John 30
200 Mary NULL
300 Mike 80
400 Jerry NULL
500 Dan 50