Direkt zum Inhalt

Die CASE-Anweisung in SQL wird erklärt

Verstehe, wie du die CASE-Anweisung von SQL nutzen kannst, um kategorische Spalten zu erstellen.
Aktualisierte 16. Jan. 2025  · 7 Min. Lesezeit

Wenn du schon mit Datenbanken gearbeitet hast, ist dir sicher aufgefallen, dass Daten selten perfekt sind und oft manipuliert werden müssen, um aussagekräftige Erkenntnisse zu gewinnen.

Um diesem Bedarf gerecht zu werden, bietet SQL ein leistungsfähiges Konstrukt, die so genannte CASE-Anweisung, mit der du neue Spalten erstellen oder Daten auf der Grundlage von Bedingungen umwandeln kannst, die auf bestehende Spalten angewendet werden.

In diesem Artikel erklären wir dir, was ein CASE-Statement ist, warum es wichtig ist und welche Anwendungsfälle dir helfen, das Potenzial dieses Statements auszuschöpfen. Lass uns loslegen!

Was ist ein CASE Statement?

Die Case-Anweisung in SQL ist ein bedingter Ausdruck, der eine Entscheidungslogik in deine Abfrage einführt. Sie funktioniert ähnlich wie eine if-elif-else-Anweisung in Pythonund ermöglicht es dir, mehrere Bedingungen auszuwerten und bestimmte Ergebnisse auf der Grundlage dieser Bedingungen zurückzugeben.

Die allgemeine Syntax lautet wie folgt:

CASE
	WHEN boolean_condition1 THEN result1
	WHEN boolean_condition2 THEN result2
	ELSE result3
END

So funktioniert es:

  • Das Schlüsselwort CASE markiert den Anfang des Ausdrucks, während END den Abschluss markiert und die bedingte Anweisung wie einen Rahmen umschließt.
  • Jede WHEN-Klausel wertet eine Bedingung aus. Wenn die Bedingung wahr ist, liefert die entsprechende DANN-Klausel ein bestimmtes Ergebnis.
  • Wenn keine der Bedingungen in den WHEN-Klauseln erfüllt ist, liefert die ELSE-Klausel ein Standardergebnis.

Warum ist die CASE-Anweisung wichtig?

Die CASE WHEN-Anweisung ist ein wertvolles Werkzeug in SQL-Abfragen und bietet mehrere wichtige Vorteile:

  • Datenumwandlung: ermöglicht es dir, neue Spalten auf der Grundlage der Werte bestehender Spalten zu erstellen.
  • Bedingte Aggregation: Ermöglicht es dir, aggregierte Werte (z. B. Summen, Zählungen, Maximalwerte) für bestimmte Teilmengen von Daten auf der Grundlage von Bedingungen zu erstellen.
  • Datenfilterung: Du kannst Zeilen anhand bestimmter Kriterien ein- oder ausschließen.
  • Vereinfachung und Lesbarkeit von Abfragen: Sie hilft dabei, die Logik in einer einzigen Abfrage zu konsolidieren, sodass nicht mehr mehrere Abfragen, temporäre Tabellen oder komplexe Joins erforderlich sind.
  • Leistungsoptimierung: Durch die Verringerung der Komplexität der SQL-Abfragen kann die CASE-Anweisung auch zur Optimierung der Leistung und zur Minimierung der Ausführungszeit beitragen, insbesondere wenn sie zusätzliche Berechnungen und Transformationen vermeidet.

Einfache CASE-Anweisung

In diesem Artikel werden wir die Tabelle film der Datenbank cinema verwenden. Nehmen wir an, wir wollen eine neue kategorische Spalte erstellen, die auf den Werten des ROI (Brutto-Budget-Verhältnis) basiert:

SELECT 
	title,
	gross,
	budget,
	gross / budget AS ROI,
CASE
	 WHEN gross / budget < 1 THEN 'low ROI'
	 WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
	 ELSE 'high ROI'
END as ROI_group
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015;

Anhand des Bruttobetrags und des Budgets haben wir den ROI berechnet, eine beliebte Rentabilitätskennzahl, die den Ertrag einer Investition misst.

Zusätzlich zum ROI-Feld haben wir auch seine Kategorisierung erhalten, um besser kommunizieren zu können:

  • Wenn die Filme mit ROI kleiner als 1 sind, ist der Wert "niedriger ROI".
  • Die Filme mit einem ROI zwischen 1 und 2 gehören zur Kategorie "mittlerer ROI".
  • "Hoher ROI" ist die Bezeichnung für Filme mit einem ROI größer oder gleich 2.

Wir haben auch nach Filmen gefiltert, deren Budget oder Bruttowert null oder negativ ist. Außerdem haben wir die Ergebnisse auf Filme beschränkt, die im Jahr 2015 veröffentlicht wurden.

CASE in der Gruppenklausel verwenden

Im ersten Beispiel haben wir ein neues Feld erstellt, mit dem wir die Daten aggregieren und zusätzliche Erkenntnisse gewinnen können.

Wir können zum Beispiel das durchschnittliche Brutto und das durchschnittliche Budget für jede Gruppe von ROI berechnen:

SELECT 
CASE
	 WHEN gross / budget < 1 THEN 'low ROI'
	 WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
	 ELSE 'high ROI'
END AS ROI_group,
avg(gross) as avg_gross,
avg(budget) as avg_budget
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015
GROUP BY
CASE
	 WHEN gross / budget < 1 THEN 'low ROI'
	 WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
	 ELSE 'high ROI'
END
ORDER BY avg(gross) DESC
;

Um die Daten zu gruppieren, fügen wir einfach die Case-Anweisung in die GROUP BY-Klausel ein. Um weitere Einblicke zu erhalten, haben wir die Zeilen in absteigender Reihenfolge nach dem durchschnittlichen Brutto geordnet. Auf diese Weise können wir feststellen, dass der höchste durchschnittliche Bruttoertrag dem hohen ROI zugeordnet ist und umgekehrt für den niedrigen ROI.

CASE in der WHERE-Klausel verwenden

Ein weiterer Vorteil der CASE-Anweisung ist, dass sie es ermöglicht, Zeilen nach bestimmten Bedingungen zu filtern. Zum Beispiel können wir je nach Sprache des Films unterschiedliche ROI-Schwellenwerte anwenden. Es ist bekannt, dass englische Filme einen konstant hohen ROI haben. Die Schwelle sollte also einen höheren Wert haben, während wir annehmen, dass die anderen Sprachen einen niedrigeren ROI haben.

SELECT 
    title,
    gross,
    budget,
    language,
    gross / budget AS ROI
FROM cinema.films
WHERE 
    CASE 
        WHEN language = 'English' THEN gross / budget > 2 -- English films need ROI > 2
        WHEN language = 'French' THEN gross / budget > 1.5 -- French films need ROI > 1.5
        ELSE gross / budget > 1.3 -- Default for other languages
    END;

Berechnung der Aggregationen

Es kann auch interessant sein, die Anzahl der Filme mit hohem ROI im Vergleich zu niedrigem ROI zu berechnen, die 2015 veröffentlicht wurden:

SELECT 
    SUM(CASE WHEN gross / budget > 2 THEN 1 ELSE 0 END) AS high_roi_films,
    SUM(CASE WHEN gross / budget BETWEEN 1 AND 2 THEN 1 ELSE 0 END) AS medium_roi_films,
    SUM(CASE WHEN gross / budget < 1 THEN 1 ELSE 0 END) AS low_roi_films
FROM cinema.films
WHERE budget > 0 AND gross > 0 AND release_year = 2015;

In der Funktion SUMME erstellen wir ein neues Feld mit dem Wert 1, wenn der ROI den Schwellenwert erreicht, und 0, wenn nicht. Wenn wir die Summe dieser neuen binären Variable nehmen, erhalten wir die Anzahl der Filme, die dieses Kriterium erfüllen.

Anhand der Ergebnisse können wir feststellen, dass die meisten Filme einen ROI von weniger als 1 haben, während nur wenige Filme hochprofitabel sind.

Verschachtelte Fall-Anweisung

Einer der fortschrittlichsten Anwendungsfälle ist die verschachtelte Fallanweisung, die ein Fall in einem Fall ist. Sie ist sehr nützlich, wenn du die Daten in Untergruppen aufteilen und für jede Untergruppe eine andere Logik anwenden musst. 

Ähnlich wie im ersten Beispiel wollen wir eine neue Spalte erstellen, die von den Werten des ROI beeinflusst werden soll. Wie wir bereits gesagt haben, ist der ROI für englischsprachige Filme im Vergleich zu den Filmen in anderen Sprachen weltweit hoch. 

Aus diesem Grund wäre es besser, die Filme in ROI-Gruppen einzuteilen, indem man sowohl den ROI als auch die Sprache berücksichtigt

SELECT 
    title,
    language,
    gross / budget AS ROI,
    CASE
        WHEN language = 'English' THEN 
            CASE 
                WHEN gross / budget < 2 THEN 'low ROI'
                WHEN gross / budget BETWEEN 2 AND 3 THEN 'medium ROI'
                ELSE 'high ROI'
            END
        ELSE 
            CASE
                WHEN gross / budget < 1 THEN 'low ROI'
                WHEN gross / budget BETWEEN 1 AND 2 THEN 'medium ROI'
                ELSE 'high ROI'
            END
    END AS ROI_group
FROM cinema.films
WHERE budget > 0 AND gross > 0 and release_year = 2006;

In der Abfrage wird die äußere CASE-Anweisung verwendet, um festzustellen, ob die Sprache Englisch ist oder nicht. Je nach Sprache bewertet der innere CASE den ROI: Die Schwellenwerte sind bei englischen Filmen höher und bei nicht-englischen Filmen niedriger. Diese mehrstufige Bedingung ermöglicht es, die Trennung von Filmen mit niedrigem, mittlerem und hohem Roi zu verbessern.

Fazit

Die CASE-Anweisung ist ein unverzichtbares SQL-Konstrukt, um aussagekräftige Erkenntnisse aus deinen Daten zu gewinnen. Die Theorie wechselt sich mit praktischen Beispielen ab, um dir zu helfen, diesen mächtigen bedingten Ausdruck tief zu verstehen. Wenn du tiefer einsteigen willst, schau dir den Datenbearbeitung in SQL-Kurs. Er behandelt die CASE-Anweisung sowie andere wichtige SQL-Aspekte wie Unterabfragen und Fensterfunktionen. Schließlich solltest du die SQL-Grundlagen um einen Überblick über die Kurse zu bekommen, die dir helfen, SQL zu beherrschen.


Eugenia Anello's photo
Author
Eugenia Anello
LinkedIn

Datenwissenschaftler/in - CRIF

Themen

Top SQL-Kurse

Lernpfad

SQL Fundamentals

26hrs hr
Master the SQL fundamentals needed for business, learn how to write SQL queries, and start analyzing your data using this powerful language.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Mehr anzeigenMehr anzeigen