ORDER BY 子句 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

ORDER BY 子句

ORDER BY 子句會排序查詢的結果集。

Syntax (語法)

[ ORDER BY expression [ ASC | DESC ] ] [ NULLS FIRST | NULLS LAST ] [ LIMIT { count | ALL } ] [ OFFSET start ]

參數

運算式

此表達式會排序查詢結果集的順序,通常是藉由指定選取清單中的一個或多個資料欄。結果會根據二進位 UTF-8 順序傳回。您還可以指定下列項目:

  • 不在選取清單中的資料欄

  • 由查詢所參考資料表中的一個或多個資料欄構成的表達式

  • 代表選取清單項目位置的序數 (或是,若沒有選取清單的話,則為資料欄在資料表中的位置)

  • 定義選取清單項目的別名

當 ORDER BY 子句包含多個表達式時,結果集會根據第一個表達式排序,然後對擁有與第一個表達式相符之值的資料列套用第二個表達式,以此類推。

ASC | DESC

此選項會定義表達式的排序順序,如下所示:

  • ASC:遞增 (例如,數值從低到高,字元字串 'A' 到 'Z')。若未指定選項,資料會預設為遞增排序。

  • DESC:遞減 (數值從高到低,字串 'Z' 到 'A')。

NULLS FIRST | NULLS LAST

這些選項指定 NULL 值應該排序在最前 (在非 null 值之前) 或排序在最後 (在非 null 值之後)。根據預設,依 ASC 順序排序時,NULL 值排在最後面,而依 DESC 順序排序時,則排在最前面。

LIMIT number | ALL

此選項會控制查詢傳回的排序資料列數。LIMIT 數字必須是正整數;最大值為 2147483647

LIMIT 0 不會傳回任何資料列。您可以使用此語法進行測試:查看查詢執行情形 (不顯示任何資料列),或從資料表傳回資料欄清單。若您使用 LIMIT 0 傳回資料欄清單,則 ORDER BY 子句是多餘的。預設值為 LIMIT ALL。

OFFSET start

此選項會指定先略過 start 之前的資料列數,再開始傳回資料列。OFFSET 數字必須是正整數;最大值為 2147483647。搭配 LIMIT 選項使用時,會先略過 OFFSET 資料列,再開始計算傳回的 LIMIT 資料列。如果未使用 LIMIT 選項,則結果集中的資料列數會減掉略過的資料列數。OFFSET 子句略過的資料列仍須經過掃描,因此使用較大的 OFFSET 值可能會導致效率不佳。

使用須知

請注意以下使用 ORDER BY 子句的預期行為:

  • NULL 值會視為「高於」所有其他值。使用預設的遞增排序順序時,NULL 值會排列在最後面。若要變更此行為,請使用 NULLS FIRST 選項。

  • 若查詢未包含 ORDER BY 子句,系統傳回的結果集當中就不會有可預測的資料列排列順序。相同的查詢運行兩次,可能會按不同順序返回結果集。

  • LIMIT 和 OFFSET 選項可在沒有 ORDER BY 子句的情況下使用;不過,若要傳回一致的資料列集,請使用這些選項搭配 ORDER BY。

  • 在任何 parallel 系統中,例如 Amazon Redshift 中,當 ORDER BY 子句無法產生唯一排列順序時,資料列順序便會不確定。也就是説,如果 ORDER BY 表達式產生重複的值,則這些資料列的傳回順序可能與其他系統不同,也可能隨著每次執行 Amazon Redshift 而有所不同。

  • Amazon Redshift 不支援 ORDER BY 子句中的字符串文字。