ある問い合わせが1つの出力テーブルを生成した後(選択リストの処理が完了した後)、並べ替えることができます。 並べ替えが選ばれなかった場合、行はランダムな順序で返されます。 そのような場合、実際の順序は、スキャンや結合計画の種類や、ディスク上に格納されている順序に依存します。 しかし、当てにはなりません。 特定の順序で出力することは、明白に並べ替える処理を選択することでのみ保証されます。
ORDER BY句は並べ替えの順番を指定します。
SELECT select_list FROM table_expression ORDER BY column1 [ASC | DESC] [, column2 [ASC | DESC] ...]
column1やその他は、選択リストの列を参照します。 これらは列の出力名(項7.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;
しかしこれらの拡張はUNION、INTERSECT、または EXCEPTを含む問い合わせでは機能しません。 また、他のSQLデータベースへの移植性もありません。
列指定の後に省略可能なASCもしくはDESCを付与することで、並び替えの方向を昇順、降順にするかを設定することができます。 ASC順がデフォルトです。 昇順では、小さな値を先に出力します。 ここでの"小さい"とは、<演算子によって決定されます。 同様に降順では>演算子で決定されます。 [1]
並べ替えのために複数の列を指定すると、先に指定した列での並べ換えで等しかった行に対して、後に指定した列での並べ替えが適用されます。
[1] | 実際、PostgreSQLは、ASCとDESCのソート順を決定するために、列データ型用のデフォルトのB-tree演算子クラスを使用します。 慣習的に、データ型は<と>演算子をこのソート順になるように設定されます。 しかし、ユーザ定義データ型の設計者は異なるものを選択することができます。 |