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 ]

參數

  • ALL

    適用於:檢查標示為是 Databricks SQL 檢查標示為是 Databricks Runtime 12.2 LTS 和更新版本

    與指定清單中所有表達式的順序相等的 SELECT 速記。 如果 sort_directionnulls_sort_order 已指定,則會套用至每個表達式。

  • expression

    任何用來建立傳回結果順序之型別的表達式。

    如果表達式是常值 INT 值,則會解譯為選取清單中的數據行位置。

  • sort_direction

    依表達式指定順序的排序順序。

    • ASC:此表達式的排序方向為遞增。
    • DESC:此表達式的排序順序為遞減。

    如果未明確指定排序方向,則預設數據列會以遞增方式排序。

  • nulls_sort_order

    選擇性地指定是否在非 NULL 值之前/之後傳回 NULL 值。 如果未 null_sort_order 指定 ,則如果排序順序為 ,則 NULL 會先排序,如果排序順序為 ASCDESC,則為 NULLS 排序最後一次。

    • NULLS FIRST:不論排序順序為何,都會先傳回 NULL 值。
    • NULLS LAST:不論排序順序為何,都會傳回 NULL 值。

指定多個表達式排序時,會由左至右進行。 所有數據列都會依第一個表達式排序。 如果第一個表達式有重複的值,則會使用第二個表達式來解析重複專案群組內的順序等等。 如果表達式在所有順序之間有重複的值,則產生的順序不具決定性。

範例

> 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