カテゴリ:

クエリ構文

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;

+---------------+
| COLUMN1       |
|---------------|
|  this         |
| %             |
| &             |
| 01            |
| 05            |
| 1             |
| 2             |
| B             |
| a             |
| this          |
| this and that |
| NULL          |
+---------------+
Copy

数字のソート順の例:

SELECT column1
FROM VALUES (3), (4), (null), (1), (2), (6), (5), (0005), (.05), (.5), (.5000)
ORDER BY column1;

+---------+
| COLUMN1 |
|---------|
|    0.05 |
|    0.50 |
|    0.50 |
|    1.00 |
|    2.00 |
|    3.00 |
|    4.00 |
|    5.00 |
|    5.00 |
|    6.00 |
|    NULL |
+---------+
Copy

NULL 値のソート順の例:

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1;

+---------+
| COLUMN1 |
|---------|
|       1 |
|       2 |
|       3 |
|    NULL |
|    NULL |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 NULLS FIRST;

+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       1 |
|       2 |
|       3 |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC;

+---------+
| COLUMN1 |
|---------|
|    NULL |
|    NULL |
|       3 |
|       2 |
|       1 |
+---------+

SELECT column1
FROM VALUES (1), (null), (2), (null), (3)
ORDER BY column1 DESC NULLS LAST;

+---------+
| COLUMN1 |
|---------|
|       3 |
|       2 |
|       1 |
|    NULL |
|    NULL |
+---------+
Copy