CodeGym /Kurse /SQL SELF /Sortierung nach mehreren Spalten: Sortierreihenfolge und ...

Sortierung nach mehreren Spalten: Sortierreihenfolge und Prioritäten

SQL SELF
Level 6, Lektion 2
Verfügbar

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 ASC verwendet.

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: NULL kommen ans Ende (NULLS LAST)
  • Bei ORDER BY ... DESC: NULL kommen 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.

2
Aufgabe
SQL SELF, Level 6, Lektion 2
Gesperrt
Sortierung der Studenten nach Alter und Vorname
Sortierung der Studenten nach Alter und Vorname
2
Aufgabe
SQL SELF, Level 6, Lektion 2
Gesperrt
Sortierung der Bestellungen nach Datum und Kunden-ID
Sortierung der Bestellungen nach Datum und Kunden-ID
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION