2.5. 行の並べ換え

1つの問い合わせが1つの出力テーブルを生成した後(選択リストの処理が完了した後)、任意で並べ替えることができます。並べ替えが選ばれなかった場合、行はランダムな順序で返されます。そのような場合、実際の順序は、スキャンや結合計画の種類や、ディスク上に格納されている順序に依存します。しかし、当てにはなりません。特定の順序で出力することは、明白に並べ替える処理を選択することでのみ保証されます。

ORDER BY句は並べ替えの順番を指定します。

SELECT select_list
    FROM table_expression
    ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...]

column1 やその他は、選択リストの列を参照します。これらは列の出力名(Section 2.3.1を参照)か、列の番号になります。以下にいくつか例を示します。

SELECT a, b FROM table1 ORDER BY a;
SELECT a + b AS sum, c FROM table1 ORDER BY sum;
SELECT a, sum(b) FROM table1 GROUP BY a ORDER BY 1;

SQL標準への拡張として、PostgreSQL は任意の評価式で並べ替えを指定することができます。

SELECT a, b FROM table1 ORDER BY a + b;

選択リストで別名を付けられた FROM 句の列名を使うこともできます。

SELECT a AS b FROM table1 ORDER BY a;

しかしこれらの拡張は、UNION、INTERSECT、EXCEPTを含む問い合わせの実行中は機能しません。また、他のDBMSへの移植性もありません。

それぞれの列の並び順は、並び換えの方向を決める ASCDESCのどちらかに従います。ASC がデフォルトです。昇順はより小さな値を始めに置きます。"より小さい"は、 <演算子で定義されます。同じように、降順は >演算子で指定されます。

1つ以上の列を並べ替えるよう指定すると、後に指定されたものは、前に指定した並び換えで並べ換えられたもののうち等しいとされた行に対して適用されます。