Wenn du mit Datenbanken arbeitest, willst du oft eine bestimmte Reihenfolge in den Daten sehen. Zum Beispiel:
- "Zeig mir die Top-10 der teuersten Produkte."
- "Welche Bestellungen waren die letzten?"
- "Wie alt sind die Schüler, angefangen bei den jüngsten?"
Der Wunsch, Daten zu ordnen, ist total verständlich: Selbst wenn du ein superkrasser Programmierer bist, ist es nicht gerade spaßig, einen chaotischen Haufen von Zeilen zu durchwühlen. Genau deshalb gibt uns SQL ein Tool, um die Zeilen im Ergebnis zu sortieren – den ORDER BY-Operator.
Grundlagen der Sortierung mit ORDER BY
ORDER BY ist wie ein Zauberstab, mit dem du die Reihenfolge der Zeilen im Resultset bestimmst. Ohne ihn kommen die Daten in "beliebiger" Reihenfolge zurück (das ist kein Fehler der Datenbank, die Reihenfolge ist einfach nicht garantiert).
So sieht der Syntax von ORDER BY aus:
SELECT spalte1, spalte2
FROM tabelle
ORDER BY spalte1 DESC;
spalte1: Name der Spalte, nach der du sortieren willst.ASC: aufsteigende Sortierung (das ist der Standardwert, du kannst es also weglassen).DESC: absteigende Sortierung.
Beispiel
Nehmen wir an, wir haben eine Tabelle students:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
Lass uns die Studenten nach Alter sortieren (aufsteigend):
SELECT name, age
FROM students
ORDER BY age ASC;
Ergebnis:
| name | age |
|---|---|
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Wenn du die Sortierrichtung auf absteigend änderst:
SELECT name, age
FROM students
ORDER BY age DESC;
Das Ergebnis sieht so aus:
| name | age |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Sortierung nach mehreren Spalten
Manchmal reicht eine Spalte zum Sortieren nicht aus. Stell dir vor, es gibt mehrere Studenten mit demselben Alter in der Datenbank, und du willst noch zusätzlich nach Name sortieren.
Sortierung nach mehreren Spalten:
SELECT spalte1, spalte2
FROM tabelle
ORDER BY spalte1 DESC, spalte2 ASC;
Hier ein Beispiel für die folgende Tabelle:
| id | name | age |
|---|---|---|
| 1 | Alex | 22 |
| 2 | Maria | 19 |
| 3 | Otto | 21 |
| 4 | Anna | 19 |
Query:
SELECT name, age
FROM students
ORDER BY age ASC, name ASC;
Ergebnis:
| name | age |
|---|---|
| Anna | 19 |
| Maria | 19 |
| Otto | 21 |
| Alex | 22 |
Hier wird zuerst nach Alter (aufsteigend) sortiert, und innerhalb jedes Alters dann nach Name alphabetisch.
Sortierung mit Aliassen
Wenn du Aliasse für Spalten verwendest, kannst du auch nach diesen Aliassen sortieren.
SELECT name AS "Name", age AS "Alter"
FROM students
ORDER BY "Alter" DESC;
Ergebnis:
| Name | Alter |
|---|---|
| Alex | 22 |
| Otto | 21 |
| Maria | 19 |
Warum ist das wichtig? Früher ging das nicht, und es gab Probleme beim Sortieren nach berechneten Spalten.
Sortierung mit berechneten Spalten
SQL erlaubt es dir, direkt im Query Berechnungen durchzuführen und dann nach dem Ergebnis dieser Berechnungen zu sortieren.
Beispiel 1. Einfachste Berechnung
SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;
Ergebnis:
| name | age | doubled_age |
|---|---|---|
| Alex | 22 | 44 |
| Otto | 21 | 42 |
| Maria | 19 | 38 |
Beispiel 2. Verwendung von Funktionen. Angenommen, wir speichern Preise für Produkte in der Tabelle products:
| product_name | price |
|---|---|
| Produkt A | 100 |
| Produkt B | 200 |
| Produkt C | 150 |
Und jetzt sortieren wir nach dem gerundeten Preis, multipliziert mit 0.9 (zum Beispiel mit Rabatt). Die Funktion ROUND gibt eine Zahl gerundet auf die gewünschte Nachkommastelle zurück.
SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;
So sieht das Ergebnis aus:
| product_name | price | discounted_price |
|---|---|---|
| Produkt A | 100 | 90 |
| Produkt C | 150 | 135 |
| Produkt B | 200 | 180 |
Praktische Anwendung der Sortierung
Sortierung spielt eine Schlüsselrolle in folgenden Szenarien:
- Erstellung von Reports, z.B. Top-10 der besten Verkäufe im Monat.
- Anzeige von Daten für User-Interfaces, z.B. eine Bestellliste sortiert nach Datum.
- Generierung von Listen für Analytics, z.B. Hervorhebung von Gruppen nach Priorität.
Typische Fehler bei der Verwendung von ORDER BY
Fehler können an jeder Ecke lauern. Hier ein paar Dinge, auf die du achten solltest:
- Wenn du versuchst, nach einer Spalte zu sortieren, die es nicht gibt, bekommst du einen Fehler:
column "not_a_column" does not exist. - Sortieren nach einem Alias, der in einer berechneten Spalte verwendet wird, kann verwirrend sein, wenn der Alias auf einer höheren Ebene definiert ist.
- Wenn du aus Versehen die Sortierrichtung vergisst, nimmt PostgreSQL standardmäßig
ASC. Das ist kein Fehler, kann aber zu unerwarteten Ergebnissen führen.
Jetzt weißt du, wie du die Sortierung in PostgreSQL mit ORDER BY steuerst. Denk dran: Gut organisierte Daten sind die halbe Miete für effektive SQL-Queries. Weiter geht's zum nächsten Thema! 😉
GO TO FULL VERSION