カテゴリ:

クエリ構文

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)は、ソート順に影響しません。

  • 特に指定がない限り、 NULL 値は、 NULL 以外の値よりも高いと見なされます。その結果、 NULLS の順序はソート順に依存します。

    • ソート順が ASC の場合は、 NULLS が最後に返されます。強制的に NULLS を最初にするには、 NULLS FIRST を使用します。

    • ソート順が DESC の場合は、最初に NULLS が返されます。強制的に NULLS を最後にするには、 NULLS LAST を使用します。

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

  • 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 |
+---------+

NULL 値のソート順の例:

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 NULLS FIRST;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC;
Copy
+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       3 |
|       2 |
|       1 |
+---------+
SELECT column1
  FROM VALUES (1), (null), (2), (null), (3)
  ORDER BY column1 DESC NULLS LAST;
Copy
+---------+
| COLUMN1 |
|---------|
|       3 |
|       2 |
|       1 |
|    NULL |
|    NULL |
+---------+