Direkt zum Hauptinhalt springen
eLearner.app
Modul 4 · Lektion 3 von 415/57 im Kurs~10 min
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

SQL
CASE
  WHEN condition_1 THEN value_1
  WHEN condition_2 THEN value_2
  ...
  ELSE default_value
END

Es 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.

SQL
-- 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:

  1. Im SELECT zum Erstellen abgeleiteter Spalten (das Beispiel oben).
  2. In ORDER BY für „benutzerdefinierte“ Sortierung:
    SQL
    ORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name;
    -- Engineering first, then the rest, alphabetically by last name.
  3. Innerhalb von Aggregatfunktionen zum „bedingten Zählen“:
    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;
    Dieses Muster – 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:

SQL
CASE department_id
  WHEN 1 THEN 'Ingegneria'
  WHEN 2 THEN 'Vendite'
  ELSE       'Altro'
END

Es 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

Übung#sql.m4.l3.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
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

Übung#sql.m4.l3.e2
Versuche: 0Wird geladen…

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).

Editor wird geladen…
Hinweis anzeigen

Das Muster SUM(CASE WHEN ... THEN 1 ELSE 0 END) ist die bedingte Zählung.

Lösung nach 3 Versuchen verfügbar