他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

7.5. 行のソート

ある問い合わせが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 FROM table1 ORDER BY b;

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

列指定の後に省略可能なASCもしくはDESCを付与することで、並び替えの方向を昇順、降順にするかを設定することができます。 ASC順がデフォルトです。 昇順では、小さな値を先に出力します。 ここでの"小さい"とは、<演算子によって決定されます。 同様に降順では>演算子で決定されます。 [1]

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

注意

[1]

実際、PostgreSQLは、ASCDESCのソート順を決定するために、列データ型用のデフォルトのB-tree演算子クラスを使用します。 慣習的に、データ型は<>演算子をこのソート順になるように設定されます。 しかし、ユーザ定義データ型の設計者は異なるものを選択することができます。