4.5. 行の並べ換え

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

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

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

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

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;

しかしこれらの拡張は UNIONINTERSECT、または EXCEPT を含む問い合わせでは機能しません。 また、他の SQL データベースへの移植性もありません。

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

並べ替えのために複数の列を指定すると、先に指定した列での並べ換えで等しかった行に対して、後に指定した列での並べ替えが適用されます。