Lektionen des Moduls (3/4)
Bedingte Logik: CASE WHEN
Alles, was wir bisher gesehen haben, extrahiert Daten so wie sie sind. Oftmals möchte man jedoch
um es umzuwandeln: Gehälter in Stufen klassifizieren, Neueinstellungen als markieren
„Junior“, übersetzen Sie einen numerischen Code in ein lesbares Etikett. SQL-Standard
Das Tool dafür heißt CASE WHEN.
Die Syntax: ein kleines if/else
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
...
ELSE default_value
ENDEs liest sich genau wie ein if/else if/else in jeder Sprache: SQL wertet aus
die Bedingungen in der richtigen Reihenfolge und stoppt beim ersten wahren und gibt die zurück
entsprechender value. Wenn keine wahr ist, wird der ELSE-Wert zurückgegeben. Wenn Sie
Wenn ELSE weggelassen wird und kein Zweig übereinstimmt, wird NULL zurückgegeben.
-- Classify employees by salary tier:
SELECT first_name,
last_name,
salary,
CASE
WHEN salary >= 50000 THEN 'Senior'
WHEN salary >= 35000 THEN 'Mid'
ELSE 'Junior'
END AS tier
FROM employees;Der CASE befindet sich im SELECT: Er erzeugt eine Spalte wie jede andere
Funktion, und es ist völlig normal, ihr mit AS einen Alias zu geben (hier
tier).
Wo CASE verwendet werden soll
Drei wiederkehrende Orte:
- Im
SELECTzum Erstellen abgeleiteter Spalten (das Beispiel oben). - In
ORDER BYfür „benutzerdefinierte“ Sortierung:SQLORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name; -- Engineering first, then the rest, alphabetically by last name. - Innerhalb von Aggregatfunktionen zum „bedingten Zählen“:
Dieses Muster –SQL
SELECT COUNT(*) AS total, SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior, SUM(CASE WHEN salary < 35000 THEN 1 ELSE 0 END) AS junior FROM employees;SUM(CASE WHEN … THEN 1 ELSE 0 END)– ist das häufigste „Bedingte Zählung“, die in Dashboards verwendet wird.
Die „kompakte“ Form
Es gibt auch eine kürzere Variante, wenn Sie einen einzelnen Ausdruck vergleichen gegen genaue Werte:
CASE department_id
WHEN 1 THEN 'Ingegneria'
WHEN 2 THEN 'Vendite'
ELSE 'Altro'
ENDEs entspricht CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END, ist jedoch kompakter. Es funktioniert nur für exakte Gleichheit: if
Sie benötigen >= oder einen anderen Vergleich, Sie müssen zum erweiterten zurückkehren
Formular.
Probieren Sie es aus
Zeigen Sie für jeden Mitarbeiter den Vornamen (first_name), den Nachnamen (last_name) und eine Spalte „Stufe“ an, die „Alto“ lautet, wenn das Gehalt mindestens 50.000 beträgt, andernfalls „Standard“. Drei Spalten, eine Zeile pro Mitarbeiter.
Hinweis anzeigen
Die Bedingung ist Gehalt >= 50000. Denken Sie daran, den CASE mit END zu schließen und den Alias „tier“ zu verwenden.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Zählen Sie für jede Abteilung (Abteilungs-ID) mithilfe von SUM(CASE...), wie viele Mitarbeiter ein hohes Gehalt (>= 50.000) und wie viele ein Standardgehalt (< 50.000) haben. Drei Spalten: Department_ID, High, Standard. Sortierung nach Abteilungs-ID (NULLS LAST).
Hinweis anzeigen
Das Muster SUM(CASE WHEN ... THEN 1 ELSE 0 END) ist die bedingte Zählung.
Lösung nach 3 Versuchen verfügbar