

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# ORDER BY 句
<a name="r_ORDER_BY_clause"></a>

**Topics**
+ [構文](#r_ORDER_BY_clause-synopsis)
+ [パラメータ](#r_ORDER_BY_clause-parameters)
+ [使用に関する注意事項](#r_ORDER_BY_usage_notes)
+ [ORDER BY の例](r_Examples_with_ORDER_BY.md)

ORDER BY 句は、クエリの結果セットをソートします。

## 構文
<a name="r_ORDER_BY_clause-synopsis"></a>

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

## パラメータ
<a name="r_ORDER_BY_clause-parameters"></a>

 *expression*   
通常は、SELECT リスト内の 1 つまたは複数の列を指定することで、クエリ結果セットのソート順を定義する式。結果は、バイナリ UTF-8 順序付けに基づいて返されます。以下を指定することもできます。  
+ SELECT リストにない列
+ クエリが参照するテーブル内に存在する、1 つまたは複数の列で構成される式
+ SELECT リストエントリの位置 (SELECT リストが存在しない場合は、テーブルの列の位置) を表す序数
+ SELECT リストエントリを定義するエイリアス
ORDER BY 句に複数の式が含まれる場合、結果セットは、最初の式に従ってソートされ、次の最初の式の値と一致する値を持つ行に 2 番目の式が適用されます。以降同様の処理が行われます。

ASC \$1 DESC   
次のように、式のソート順を定義するオプション:   
+ ASC: 昇順 (数値の場合は低から高、文字列の場合は「A」から「Z」など) オプションを指定しない場合、データはデフォルトでは昇順にソートされます。
+ DESC: 降順 (数値の場合は高から低、文字列の場合は「Z」から「A」)。

NULLS FIRST \$1 NULLS LAST  
NULL 値を NULL 以外の値より先に順序付けするか、NULL 以外の値の後に順序付けするかを指定するオプション。デフォルトでは、NULL 値は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。

LIMIT number** \$1 ALL   <a name="order-by-clause-limit"></a>
クエリが返すソート済みの行数を制御するオプション。LIMIT 数は正の整数でなければなりません。最大値は `2147483647` です。  
LIMIT 0 は行を返しません。この構文は、(行を表示せずに) クエリが実行されているかを確認したり、テーブルから列リストを返すためのテスト目的で使用できます。列リストを返すために LIMIT 0 を使用した場合、ORDER BY 句は重複です。デフォルトは LIMIT ALL です。

OFFSET start**   <a name="order-by-clause-offset"></a>
行を返す前に、start** の前の行数をスキップするよう指定するオプション。OFFSET 数は正の整数でなければなりません。最大値は `2147483647` です。LIMIT オプションを合わせて使用すると、OFFSET 行は、返される LIMIT 行のカウントを開始する前にスキップされます。LIMIT オプションを使用しない場合、結果セット内の行の数が、スキップされる行の数だけ少なくなります。OFFSET 句によってスキップされた行もスキャンされる必要はあるため、大きい OFFSET 値を使用することは一般的に非効率的です。

## 使用に関する注意事項
<a name="r_ORDER_BY_usage_notes"></a>

 ORDER BY 句を使用すると、次の動作が予想されます。
+ ヌル値は他のすべての値よりも「高い」と見なされます。デフォルトの昇順のソートでは、NULL 値は最後に表示されます。この動作を変更するには、NULLS FIRST オプションを使用します。
+ クエリに ORDER BY 句が含まれていない場合、結果行が返す行の順番は予想不能です。同じクエリを 2 回実行した場合に、結果セットが返される順番が異なることがあります。
+ LIMIT オプションと OFFSET オプションは、ORDER BY 句なしに使用できます。ただし、整合性のある行セットを返すには、これらのオプションを ORDER BY と組み合わせて使用してください。
+ Amazon Redshift などの並列システムで ORDER BY が一意の順番を生成しない場合、行の順番は非決定性です。つまり、ORDER BY 式が複数の値を生成する場合、行が返される順番は、システムごと、または Amazon Redshift の実行ごとに異なることがあるということです。
+ Amazon Redshift は、ORDER BY 句で文字列リテラルをサポートしていません。

# ORDER BY の例
<a name="r_Examples_with_ORDER_BY"></a>

CATEGORY テーブルの 11 の行をすべて、2 番目の列 (CATGROUP) でソートして返します。CATGROUP の値が同じ結果の場合、CATDESC 列の値は文字列の長さによってソートされます。次に CATID 列と CATNAME 列でソートされます。

```
select * from category order by 2, length(catdesc), 1, 3;

catid | catgroup |  catname  |                  catdesc
------+----------+-----------+----------------------------------------
10    | Concerts | Jazz      | All jazz singers and bands
9     | Concerts | Pop       | All rock and pop music concerts
11    | Concerts | Classical | All symphony, concerto, and choir conce
6     | Shows    | Musicals  | Musical theatre
7     | Shows    | Plays     | All non-musical theatre
8     | Shows    | Opera     | All opera and light opera
5     | Sports   | MLS       | Major League Soccer
1     | Sports   | MLB       | Major League Baseball
2     | Sports   | NHL       | National Hockey League
3     | Sports   | NFL       | National Football League
4     | Sports   | NBA       | National Basketball Association
(11 rows)
```

SALES テーブルの選択した列を、QTYSOLD 値の高い順にソートして返します。結果を上位の 10 行に制限します。

```
select salesid, qtysold, pricepaid, commission, saletime from sales
order by qtysold, pricepaid, commission, salesid, saletime desc
limit 10;

salesid | qtysold | pricepaid | commission |      saletime
--------+---------+-----------+------------+---------------------
15401   |       8 |    272.00 |      40.80 | 2008-03-18 06:54:56
61683   |       8 |    296.00 |      44.40 | 2008-11-26 04:00:23
90528   |       8 |    328.00 |      49.20 | 2008-06-11 02:38:09
74549   |       8 |    336.00 |      50.40 | 2008-01-19 12:01:21
130232  |       8 |    352.00 |      52.80 | 2008-05-02 05:52:31
55243   |       8 |    384.00 |      57.60 | 2008-07-12 02:19:53
16004   |       8 |    440.00 |      66.00 | 2008-11-04 07:22:31
489     |       8 |    496.00 |      74.40 | 2008-08-03 05:48:55
4197    |       8 |    512.00 |      76.80 | 2008-03-23 11:35:33
16929   |       8 |    568.00 |      85.20 | 2008-12-19 02:59:33
(10 rows)
```

LIMIT 0 構文を使用することで、列リストを返し、行を返しません。

```
select * from venue limit 0;
venueid | venuename | venuecity | venuestate | venueseats
---------+-----------+-----------+------------+------------
(0 rows)
```