Sortieren und Formatieren – klingt logisch und ist echt nützlich. Aber manchmal kann man sich dabei ganz schön verheddern und bekommt dann unerwartete Ergebnisse. Lass uns gemeinsam die häufigsten Fehler anschauen, damit deine Daten immer top aussehen und in der richtigen Reihenfolge kommen!
1. Sortieren von Daten mit verschiedenen Typen
Stell dir vor: Du sortierst eine Tabelle nach einer Spalte, die eine Mischung aus Zahlen und Strings enthält. PostgreSQL gibt sich Mühe, aber das Ergebnis kann dich überraschen. Zum Beispiel hast du eine Tabelle, in der value ein Text ist:
| id | value |
|---|---|
| 1 | 10 |
| 2 | 2 |
| 3 | apple |
| 4 | 20 |
Und du schreibst die Query:
SELECT *
FROM mixed_data
ORDER BY value;
Erwartetes Ergebnis? Vielleicht: 2, 10, 20, apple? Nope, PostgreSQL sortiert Strings nach dem lexikografischen/alphabetischen Prinzip, und das Ergebnis ist: 10, 2, 20, apple.
Wie vermeidest du den Fehler?
Wenn du weißt, dass deine Textspalte eigentlich Zahlen enthält, dann wandel sie vor dem Sortieren explizit in Zahlen um:
SELECT * FROM mixed_data ORDER BY value::INT;
Jetzt bekommst du: 2, 10, 20.
Aber Vorsicht: Wenn in deiner Spalte Strings stehen, die keine Zahlen sind, gibt’s einen Fehler!
2. Mehrere Spalten zum Sortieren angeben
Ein typischer Fehler – man vergisst die Prioritäten, wenn man nach mehreren Spalten sortiert. Zum Beispiel willst du Studenten nach Nachname und dann nach Alter sortieren, vertauschst aber die Reihenfolge:
| id | last_name | age |
|---|---|---|
| 1 | Lin | 18 |
| 2 | Lin | 20 |
| 3 | Song | 19 |
Deine Query:
-- Falsche Sortierung
SELECT *
FROM students
ORDER BY age, last_name;
Ergebnis:
| id | last_name | age |
|---|---|---|
| 1 | Lin | 18 |
| 3 | Song | 19 |
| 2 | Lin | 20 |
Hier sortiert PostgreSQL erst nach Alter und dann nach Nachname. Nicht ganz das, was du wolltest, oder?
Die richtige Query:
SELECT *
FROM students
ORDER BY last_name, age;
Ergebnis:
| id | last_name | age |
|---|---|---|
| 1 | Lin | 18 |
| 2 | Lin | 20 |
| 3 | Song | 19 |
Jetzt wird zuerst nach Nachname sortiert und innerhalb des Nachnamens nach Alter. Genau so, wie du es wolltest!
3. Sortieren mit verschiedenen Richtungen
Manchmal willst du mehrere Spalten mit unterschiedlichen Richtungen sortieren. Zum Beispiel Produkte nach Kategorie (aufsteigend) und innerhalb der Kategorie nach Preis (absteigend). Der Fehler passiert, wenn du die Richtung für die zweite Spalte vergisst:
| id | category | price |
|---|---|---|
| 1 | Electronics | 99.99 |
| 2 | Electronics | 199.99 |
| 3 | Furniture | 299.99 |
| 4 | Furniture | 199.99 |
Deine Query:
-- Falsche Sortierung
SELECT *
FROM products
ORDER BY category, price;
Ergebnis: Die Preise innerhalb der Kategorien sind aufsteigend sortiert, aber du wolltest vielleicht absteigend.
Die richtige Query:
SELECT *
FROM products
ORDER BY category ASC, price DESC;
Fehler beim Formatieren
4. Falsche Nutzung von CONCAT()
Angenommen, du willst Vorname und Nachname zu einem String zusammenfügen, vergisst aber in der Eile den Separator:
| id | first_name | last_name |
|---|---|---|
| 1 | John | Doe |
| 2 | Jane | Smith |
Deine Query:
SELECT
CONCAT(first_name, last_name) AS full_name
FROM employees;
Ergebnis:
| full_name |
|---|
| JohnDoe |
| JaneSmith |
Wie behebst du das?
Füge einfach ein Leerzeichen zwischen Vor- und Nachname ein:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
Jetzt sieht alles viel schöner aus:
| full_name |
|---|
| John Doe |
| Jane Smith |
5. Fehler bei der Nutzung von CAST()
Angenommen, du willst ein Datum in einen String umwandeln, damit es schöner aussieht, vergisst aber das Format anzugeben:
| id | event_date |
|---|---|
| 1 | 2023-01-15 |
Deine Query:
-- Falsche Umwandlung
SELECT
CAST(event_date AS TEXT)
FROM events;
Ergebnis: Das Datum wird im Format YYYY-MM-DD angezeigt, was nicht immer für deine User praktisch ist.
Wie behebst du das?
Nutze die Funktion TO_CHAR() und gib das Format an:
SELECT
TO_CHAR(event_date, 'DD-MM-YYYY') AS formatted_date
FROM events;
Jetzt wird das Datum als 15-01-2023 angezeigt.
6. Fehler bei der Nutzung von DISTINCT
DISTINCT ist ein mächtiges Tool, um einzigartige Werte zu bekommen, aber manchmal wird es falsch verwendet. Zum Beispiel willst du eine Liste mit einzigartigen Mitarbeiternamen:
SELECT DISTINCT first_name, last_name
FROM employees;
Auf den ersten Blick sieht die Query korrekt aus, aber wenn zwei Mitarbeiter den gleichen Vor- und Nachnamen haben, erscheinen sie als ein Ergebnis, auch wenn es verschiedene Leute sind.
Beispieldaten:
| id | first_name | last_name |
|---|---|---|
| 1 | Alex | Lin |
| 2 | Maria | Chi |
| 3 | Alex | Lin |
Ergebnis der Query:
| first_name | last_name |
|---|---|
| Alex | Lin |
| Maria | Chi |
Wie vermeidest du den Fehler?
Füge den Primärschlüssel hinzu, um echte Einzigartigkeit zu garantieren:
SELECT DISTINCT ON (id) first_name, last_name
FROM employees;
Ergebnis der Query mit DISTINCT ON (id):
| id | first_name | last_name |
|---|---|---|
| 1 | Alex | Lin |
| 2 | Maria | Chi |
| 3 | Alex | Lin |
Wie kannst du Fehler vermeiden?
Mit Daten zu arbeiten braucht ein Auge fürs Detail. Damit du die oben genannten Fehler vermeidest:
Checke die Datentypen: Stelle sicher, dass die Funktionen, die du nutzt, die Typen deiner Spalten unterstützen.
Checke die Sortierreihenfolge: Achte darauf, dass die Spalten in der richtigen Reihenfolge stehen. Vergiss nicht die Sortierrichtungen ASC, DESC.
Teste deine Queries mit kleinen Datensätzen: So findest du Fehler schon früh.
Vergiss nicht die PostgreSQL Doku: Sie hilft dir bei kniffligen Fragen zu Funktionen und deren Nutzung. Hier der Link: off. PostgreSQL Dokumentation.
Jetzt bist du bereit, jedes Rätsel rund ums Formatieren und Sortieren zu knacken! Weiter geht’s.
GO TO FULL VERSION