Daten sortieren und formatieren – das sind wichtige Skills, mit denen du lesbare Reports bauen, Datenanalyse optimieren und die User Experience verbessern kannst. Das brauchst du beim Erstellen von Analyse-Reports, beim Vorbereiten von Daten für den Export und generell im Alltag mit Datenbanken. In der Praxis hast du oft Aufgaben, bei denen du Daten schön formatieren, doppelte Einträge löschen und Infos für bessere Übersicht sortieren musst. Genau das machen wir heute!
Beispiel 1: Erstellen einer Liste einzigartiger Kunden mit kombiniertem Vor- und Nachnamen, sortiert nach Nachname
Wir haben eine Tabelle customers, in der Kundendaten gespeichert sind:
| id | first_name | last_name | city |
|---|---|---|---|
| 1 | Alex | Lin | New York |
| 2 | Maria | Chi | Los Angeles |
| 3 | Alex | Lin | New York |
| 4 | Anna | Song | Chicago |
Unser Ziel:
first_nameundlast_namezu einer Spaltefull_namezusammenfügen.- Nur einzigartige Kunden rausziehen.
- Die Liste nach Nachname (
last_name) sortieren.
SQL-Query
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
city
FROM customers
ORDER BY last_name;
| full_name | city |
|---|---|
| Maria Chi | Los Angeles |
| Alex Lin | New York |
| Anna Song | Chicago |
Check mal: Doppelte Einträge wie Alex Lin sind dank DISTINCT rausgeflogen und die komplette Liste ist alphabetisch nach Nachname sortiert.
Beispiel 2: Formatieren und Sortieren von Bestelldaten
In der Tabelle orders sind die Bestellungen gespeichert:
| order_id | customer_name | order_date | total_amount |
|---|---|---|---|
| 1 | Alex Lin | 2023-10-01 | 1500 |
| 2 | Maria Chi | 2023-10-02 | 2000 |
| 3 | Alex Lin | 2023-10-03 | 1500 |
| 4 | Anna Song | 2023-10-04 | 3000 |
Unser Ziel:
- Eine Spalte
formatted_order_dateerstellen, wo das Bestelldatum im Format DD-MM-YYYY steht. - Doppelte Kombinationen von Kunde und Datum entfernen (nur einzigartige
customer_nameundorder_datebehalten). - Bestellungen nach Datum absteigend sortieren.
- SQL-Query
SELECT DISTINCT
customer_name,
TO_CHAR(order_date, 'DD-MM-YYYY') AS formatted_order_date,
total_amount
FROM orders
ORDER BY order_date DESC;
Ergebnis:
| customer_name | formatted_order_date | total_amount |
|---|---|---|
| Anna Song | 04-10-2023 | 3000 |
| Alex Lin | 03-10-2023 | 1500 |
| Maria Chi | 02-10-2023 | 2000 |
Siehst du, wie wir mit TO_CHAR() das Datum ins DD-MM-YYYY-Format gebracht haben und mit DISTINCT doppelte Einträge rausgefiltert wurden?
Beispiel 3: Einzigartige Kombinationen "Vorname + Nachname" von Studenten extrahieren und nach Nachname und Geburtsdatum sortieren
In der Tabelle students sind die Studentendaten:
| student_id | first_name | last_name | birth_date |
|---|---|---|---|
| 1 | Alex | Lin | 2001-03-15 |
| 2 | Maria | Chi | 2000-06-20 |
| 3 | Alex | Lin | 2001-03-15 |
| 4 | Anna | Song | 1999-10-10 |
Unser Ziel:
- Vor- und Nachname zu einer Spalte
full_namezusammenfügen. - Einzigartige Kombinationen "Vorname + Nachname" extrahieren.
- Studenten nach Nachname und dann nach Geburtsdatum sortieren.
SELECT DISTINCT
CONCAT(first_name, ' ', last_name) AS full_name,
birth_date
FROM students
ORDER BY last_name, birth_date;
Ergebnis:
| full_name | birth_date |
|---|---|
| Maria Chi | 2000-06-20 |
| Alex Lin | 2001-03-15 |
| Anna Song | 1999-10-10 |
Wichtig: Zwei identische Einträge für "Alex Lin" wurden zu einer Zeile zusammengefasst und die Sortierung läuft erst nach Nachname, dann nach Geburtsdatum.
Praxisaufgabe
Wende das Wissen von heute an, um folgende Aufgabe zu lösen:
Aufgabe: Du hast eine Tabelle products, die folgende Daten enthält:
| product_id | category | product_name | price |
|---|---|---|---|
| 1 | Elektronik | Telefon | 50000 |
| 2 | Kleidung | Jacke | 8000 |
| 3 | Elektronik | Laptop | 70000 |
| 4 | Kleidung | Jacke | 8000 |
- Erstelle eine Spalte
formatted_product, in derproduct_namemit der Kategorie durch einen Bindestrich verbunden ist, z.B.:Telefon - Elektronik. - Entferne doppelte Kombinationen von
product_nameundcategory. - Sortiere die Produkte nach Kategorie und dann nach Preis (vom günstigsten zum teuersten).
Hier ist ein Query-Template für die Aufgabe:
SELECT DISTINCT
CONCAT(product_name, ' - ', category) AS formatted_product,
price
FROM products
ORDER BY category, price ASC;
Versuch mal selbst, das Ergebnis dieses Queries zu überlegen!
Mit CONCAT(), DISTINCT und ORDER BY bekommst du super lesbare und strukturierte Daten – das ist mega wichtig in echten Projekten und Aufgaben. Üb ruhig weiter an Beispielen, damit du die Kombis richtig drauf hast!
GO TO FULL VERSION