Stell dir vor, du arbeitest mit einer riesigen Datenbank über Studierende. Nur nach Nachnamen zu sortieren ist schon praktisch, aber was, wenn es in deiner Tabelle mehrere Leute mit demselben Nachnamen gibt? Damit die Ausgabe dann lesbarer wird, kannst du noch nach dem Vornamen sortieren. Oder ein anderes Beispiel: Du willst eine Bestellliste zuerst nach Datum und dann nach dem Gesamtbetrag sortieren. Genau hier hilft dir die Sortierung nach mehreren Spalten.
Sortieren nach mehreren Spalten ermöglicht dir: 1. Daten in einer klar definierten Reihenfolge zu ordnen; 2. Die Sortier-Prioritäten zu steuern (erst nach einer Spalte, dann nach der nächsten); 3. Die Daten strukturierter und lesbarer auszugeben.
Syntax für Sortierung nach mehreren Spalten
Um nach mehreren Spalten zu sortieren, nutzt du den bekannten ORDER BY-Operator, aber diesmal listest du mehrere Spalten durch Kommas getrennt auf. PostgreSQL sortiert dann zuerst nach der ersten Spalte, bei gleichen Werten nach der zweiten, und so weiter.
Hier ist die allgemeine Syntax:
SELECT spalten
FROM tabelle
ORDER BY spalte1 richtung1, spalte2 richtung2, ... ;
Wo:
spalte1,spalte2, ... — das sind die Spalten, nach denen du sortieren willst.richtung1,richtung2, ... — das ist die Sortierrichtung (ASC— aufsteigend,DESC— absteigend).- Dieser Parameter ist optional, standardmäßig wird
ASCverwendet.
Beispiel 1: Studierende nach Nachname, dann nach Vorname sortieren
Stell dir eine Tabelle students mit Infos über Studierende vor:
| id | first_name | last_name | age |
|---|---|---|---|
| 1 | Anna | Lin | 20 |
| 2 | Victor | Lin | 22 |
| 3 | Maria | Kim | 21 |
| 4 | Otto | Lin | 23 |
| 5 | Anna | Kim | 20 |
Unsere Aufgabe: Die Studierenden zuerst nach Nachname (last_name), dann nach Vorname (first_name) sortieren.
SELECT id, first_name, last_name, age
FROM students
ORDER BY last_name ASC, first_name ASC;
Ergebnis:
| id | first_name | last_name | age |
|---|---|---|---|
| 5 | Anna | Kim | 20 |
| 3 | Maria | Kim | 21 |
| 1 | Anna | Lin | 20 |
| 4 | Otto | Lin | 23 |
| 2 | Victor | Lin | 22 |
Wie du siehst, sind die Zeilen zuerst nach Nachname (Kim, dann Lin) und dann nach Vorname (Anna, Maria usw.) sortiert. Das ist besonders praktisch, wenn du schnell jemanden in der Liste finden oder ein Klassenbuch sortieren willst.
Beispiel 2: Bestellungen nach Datum und Betrag sortieren
Stell dir eine Tabelle orders mit Bestelldaten vor:
| order_id | customer_id | order_date | total |
|---|---|---|---|
| 1 | 101 | 2025-10-01 | 500 |
| 2 | 102 | 2025-10-03 | 200 |
| 3 | 103 | 2025-10-02 | 300 |
| 4 | 104 | 2025-10-01 | 100 |
| 5 | 101 | 2025-10-03 | 600 |
Wir wollen die Bestellungen zuerst nach order_date und dann nach total absteigend sortieren.
SQL-Query:
SELECT order_id, customer_id, order_date, total
FROM orders
ORDER BY order_date ASC, total DESC;
Ergebnis:
| order_id | customer_id | order_date | total |
|---|---|---|---|
| 1 | 101 | 2025-10-01 | 500 |
| 4 | 104 | 2025-10-01 | 100 |
| 3 | 103 | 2025-10-02 | 300 |
| 5 | 101 | 2025-10-03 | 600 |
| 2 | 102 | 2025-10-03 | 200 |
Wie du siehst, werden Bestellungen mit demselben Datum auch noch nach dem Betrag sortiert.
Umgang mit NULL beim Sortieren: NULLS FIRST und NULLS LAST
In SQL gibt's den speziellen Wert NULL, der bedeutet, dass kein Wert vorhanden ist. Wie man damit im Detail umgeht, schauen wir uns später noch genauer an. Aber jetzt ist ein guter Moment, um zu zeigen, wie du beim Sortieren damit umgehst.
Wenn du Spalten sortierst, die NULL enthalten, muss PostgreSQL entscheiden, wo die leeren Werte landen: am Anfang oder am Ende.
Standardmäßig gilt:
- Bei
ORDER BY ... ASC:NULLkommen ans Ende (NULLS LAST) - Bei
ORDER BY ... DESC:NULLkommen an den Anfang (NULLS FIRST)
Manchmal passt das nicht — dann kannst du das Verhalten explizit mit NULLS FIRST oder NULLS LAST steuern.
Syntax:
ORDER BY spalte ASC NULLS FIRST
ORDER BY spalte DESC NULLS LAST
Beispiel: Sortieren nach Noten, wobei NULL = "Note noch nicht vergeben"
SELECT student_id, grade
FROM grades
ORDER BY grade DESC NULLS LAST;
So bekommst du zuerst die besten Studierenden, dann die schwächeren, und ganz am Ende die, die noch keine Note (NULL) haben.
Beispiel: Umgekehrt — Studierende ohne Note zuerst anzeigen
Angenommen, wir haben eine Tabelle grades, in der manche Studierende noch keine Note (NULL) bekommen haben:
| student_id | grade |
|---|---|
| 101 | NULL |
| 102 | 85 |
| 103 | NULL |
| 104 | 92 |
| 105 | 76 |
Wir wollen zuerst die Studierenden ohne Note anzeigen und dann die anderen aufsteigend nach Note.
SELECT student_id, grade
FROM grades
ORDER BY grade ASC NULLS FIRST;
Ergebnis:
| student_id | grade |
|---|---|
| 101 | NULL |
| 103 | NULL |
| 105 | 76 |
| 102 | 85 |
| 104 | 92 |
Mit NULLS FIRST zusammen mit ORDER BY grade ASC stellst du sicher, dass die Einträge mit NULL ganz vorne stehen und danach die Noten aufsteigend kommen.
Über Besonderheiten und typische Fehler
Viele Anfänger vergessen, die Sortierrichtung für jede Spalte anzugeben. Wenn du keine Richtung angibst, nimmt PostgreSQL standardmäßig ASC. Auch wird oft vergessen, dass die Reihenfolge der Spalten im ORDER BY wichtig ist: Erst wird nach der ersten Spalte sortiert, und nur wenn die Werte dort gleich sind, kommt die nächste Spalte dran.
GO TO FULL VERSION