カテゴリ:

クエリ構文

ORDER BY

SELECT リストからの結果テーブルの行の順序を指定します。

構文

SELECT ...
FROM ...
ORDER BY orderItem [ , orderItem , ... ]
[ ... ]
Copy

条件:

orderItem ::= { <column_alias> | <position> | <expr> } [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ]
Copy

パラメーター

column_alias

クエリブロックの SELECT リストに表示される列エイリアス。

position

SELECT リスト内の式の位置。

expr

現在のスコープ内のテーブルの式。

{ ASC | DESC }

オプションで、昇順(低い順)または降順(高い順)でソートキーの値を返します。

デフォルト: ASC

NULLS { FIRST | LAST }

オプションで、ソート順(ASC または DESC)に基づいて、NULL 値を NULL 以外の値の前後に返すかどうかを指定します。

デフォルト:ソート順(ASC または DESC)に依存します。詳細については、以下の使用上の注意をご参照ください

使用上の注意

  • すべてのデータは、ASCII テーブルの各文字の数値バイト値に従ってソートされます。UTF-8エンコードがサポートされています。

  • 数値の場合、小数点の前の先行ゼロと小数点の後の後続ゼロ(0)は、ソート順に影響しません。

  • NULLS FIRST または NULLS LAST が指定されていない場合、NULL 値の順序は DEFAULT_NULL_ORDERING パラメーターの設定とソート順序に依存します。

    • ソート順が ASC (デフォルト)で、DEFAULT_NULL_ORDERING パラメーターが LAST (デフォルト)にセットされている場合、NULL の値が最後に返されます。したがって、特に指定がない限り、NULL の値は、NULL 以外の値よりも高いとみなされます。

    • ソート順が ASC で、DEFAULT_NULL_ORDERING パラメーターが FIRST にセットされている場合、NULL の値が最初に返されます。

    • ソート順が DESC で、DEFAULT_NULL_ORDERING パラメーターが FIRST にセットされている場合、NULL の値が最後に返されます。

    • ソート順が DESC で、DEFAULT_NULL_ORDERING パラメーターが LAST にセットされている場合、NULL の値が最初に返されます。

  • 異なるデータ型の要素を含む配列など、 半構造化 データ内の異なるデータ型の値に対しては、ソート順の一貫性が保証されません。

  • Top-Kプルーニングは、 LIMIT と ORDER BY の両方の句を含むクエリのパフォーマンスを向上させることができます。詳細については、 クエリパフォーマンス向上のためのTop-Kプルーニング をご参照ください。

  • ORDER BY は、クエリのさまざまなレベルで使用できます。たとえば、サブクエリや OVER() サブ句内などです。サブクエリまたはサブ句内の ORDER BY は、そのサブクエリまたはサブ句内のみで適用されます。たとえば、次のクエリの ORDER BY は、クエリの最も外側のレベルではなく、サブクエリ内のみで結果を並べ替えます。

    SELECT * 
      FROM (
        SELECT branch_name
          FROM branch_offices
          ORDER BY monthly_sales DESC
          LIMIT 3
      );
    
    Copy

    この例では、サブクエリで ORDER BY が指定されているため、サブクエリは月次売上の順に名前を返します。サブクエリの ORDER BY は、外部クエリには適用されません。このクエリは、毎月の売上が最も多かった3つの支店名を返しますが、必ずしも月次の売上順ではありません。

    並べ替えのコストは高価になる場合があります。外部クエリの結果を並べ替える場合は、クエリの最上位でのみ ORDER BY 句を使用し、必要がない限り、サブクエリで ORDER BY 句を使用しないようにします。

文字列のソート順の例:

SELECT column1
  FROM VALUES ('a'), ('1'), ('B'), (null), ('2'), ('01'), ('05'), (' this'), ('this'), ('this and that'), ('&'), ('%')
  ORDER BY column1;
Copy
+---------------+
| COLUMN1       |
|---------------|
|  this         |
| %             |
| &             |
| 01            |
| 05            |
| 1             |
| 2             |
| B             |
| a             |
| this          |
| this and that |
| NULL          |
+---------------+

数字のソート順の例:

SELECT column1
  FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000)
  ORDER BY column1;
Copy
+---------+
| COLUMN1 |
|---------|
|    0.05 |
|    0.50 |
|    0.50 |
|    1.00 |
|    2.00 |
|    3.00 |
|    4.00 |
|    5.00 |
|    5.00 |
|    6.00 |
|    NULL |
+---------+

DEFAULT_NULL_ORDERING パラメーターを LAST (デフォルト)にセットした NULL 値のソート順の例:

ALTER SESSION SET DEFAULT_NULL_ORDERING = 'LAST';
Copy
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1;
Copy
+---------+
| COLUMN1 |
|---------|
|       1 |
|       2 |
|       3 |
|    NULL |
|    NULL |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       3 |
|       2 |
|       1 |
+---------+

この例は、NULLS FIRST パラメーターが、DEFAULT_NULL_ORDERING パラメーターの設定をオーバーライドすることを示しています。

SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 NULLS FIRST;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+

DEFAULT_NULL_ORDERING パラメーターを FIRST にセットした NULL 値のソート順の例:

ALTER SESSION SET DEFAULT_NULL_ORDERING = 'FIRST';
Copy
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC;
Copy
+---------+
| COLUMN1 |
|---------|
|       3 |
|       2 |
|       1 |
|    NULL |
|    NULL |
+---------+

この例は、NULLS LAST パラメーターが、DEFAULT_NULL_ORDERING パラメーターの設定をオーバーライドすることを示しています。

SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 NULLS LAST;
Copy
+---------+
| COLUMN1 |
|---------|
|       1 |
|       2 |
|       3 |
|    NULL |
|    NULL |
+---------+