7.5. Zeilen sortieren

Nachdem eine Anfrage eine Ergebnistabelle erzeugt hat (nachdem die Select-Liste verarbeitet wurde), kann das Ergebnis wahlweise sortiert werden. Wenn das Sortieren nicht gewählt wird, dann werden die Zeilen in zufälliger Reihenfolge zurückgegeben. Die tatsächliche Reihenfolge hängt in diesem Fall von den Scan- und Verbund-Plantypen und der Reihenfolge auf der Festplatte ab, aber darauf darf man sich auf keinen Fall verlassen. Eine bestimmte Reihenfolge kann nur gewährleistet werden, wenn der Sortierschritt ausdrücklich angefordert wird.

Die ORDER BY-Klausel gibt die Sortierreihenfolge an:

SELECT select_liste
    FROM tabellen_ausdruck
    ORDER BY spalte1 [ASC | DESC] [, spalte2 [ASC | DESC] ...]

spalte1 usw. verweisen auf Spalten in der Select-Liste. Sie können entweder der Ausgabename einer Spalte (siehe Abschnitt 7.3.2) oder die Nummer einer Spalte sein. Einige Beispiele:

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

Als Erweiterung gegenüber dem SQL-Standard erlaubt PostgreSQL die Sortierung nach beliebigen Ausdrücken:

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

Verweise auf Spaltennamen aus der FROM-Klausel, die in der Select-Liste umbenannt wurden, sind auch erlaubt:

SELECT a AS b FROM tabelle1 ORDER BY a;

Aber diese Erweiterungen funktionieren nicht in Anfragen mit UNION, INTERSECT oder EXCEPT und sind nicht auf andere SQL-Datenbanken portierbar.

Nach jeder Spaltenangabe kann wahlweise ASC oder DESC stehen um die Sortierrichtung auf aufsteigend (englisch ascending) bzw. abfallend (descending) zu setzen. Die aufsteigende Reihenfolge stellt kleinere Werte an den Anfang, wobei „kleiner“ durch den Operator < festgelegt wird. Entsprechend wird die abfallende Reihenfolge durch den Operator > festgelegt.

Wenn mehrere Spalten zum Sortieren angegeben werden, dann werden die hinteren Einträge verwendet, um Zeilen zu sortieren, die der von den vorderen Einträgen festgelegten Reihenfolge nach gleich sind.