Case in MySQL: 11 Beispiele aus der Praxis

Letzte Aktualisierung: Mai 25 2025
  • Mit der CASE-Funktion in MySQL können Sie bedingte Auswertungen durchführen und benutzerdefinierte Ergebnisse zurückgeben.
  • Mit der WHEN-Klausel können mehrere Bedingungen verwendet und mit ELSE Nullwerte behandelt werden.
  • CASE kann mit Aggregatfunktionen kombiniert werden, um Abfragen zu optimieren.
  • Um die Leistung und Lesbarkeit des Codes aufrechtzuerhalten, ist es wichtig, bei der Verwendung von CASE die Best Practices zu befolgen.
Fall in MySQL

Die CASE-Funktion in MySQL ist ein leistungsfähiges Tool, mit dem Sie bedingte Operationen innerhalb Ihrer Abfragen durchführen können. Mit CASE können Sie verschiedene Bedingungen auswerten und bestimmte Ergebnisse zurückgeben, je nachdem, ob diese Bedingungen erfüllt sind oder nicht. Wir erklären diese Funktion anhand praktischer Beispiele, die Ihnen helfen, den Einsatz von CASE in MySQL zu meistern und Ihre Fähigkeiten im Datenbankmanagement zu verbessern.

Was ist die CASE-Funktion in MySQL?

Die CASE-Funktion in MySQL ist ein bedingter Ausdruck, mit dem Sie verschiedene Bedingungen auswerten und je nach Erfüllung dieser Bedingungen spezifische Ergebnisse zurückgeben können. Sie ist ein sehr nützliches Werkzeug, um logische Operationen in Ihren Abfragen durchzuführen und basierend auf bestimmten Kriterien benutzerdefinierte Ergebnisse zu erhalten.

CASE funktioniert ähnlich wie eine Reihe von IF-THEN-ELSE-Anweisungen, bei denen Sie mehrere Bedingungen und die Werte angeben können, die zurückgegeben werden sollen, wenn diese Bedingungen erfüllt sind. Wenn keine der Bedingungen erfüllt ist, können Sie mit der ELSE-Klausel einen Standardwert definieren.

Grundlegende CASE-Syntax in MySQL

Die grundlegende Syntax der CASE-Funktion in MySQL lautet wie folgt:

CASE
    WHEN condición1 THEN resultado1
    WHEN condición2 THEN resultado2
    ...
    WHEN condiciónN THEN resultadoN
    ELSE resultado_predeterminado
END

Hier ist eine Erklärung jedes Teils der Syntax:

  • WHEN: Gibt die auszuwertende Bedingung an.
  • THEN: Gibt das Ergebnis an, das zurückgegeben wird, wenn die entsprechende Bedingung erfüllt ist.
  • ELSE: (Optional) Gibt das zurückzugebende Ergebnis an, wenn keine der oben genannten Bedingungen erfüllt ist.
  • END: Markiert das Ende des CASE-Ausdrucks.

Nachdem Sie nun die grundlegende Syntax kennen, sehen wir uns einige praktische Beispiele an!

Beispiel 1: Klassifizieren Sie die Schüler nach ihrem Durchschnitt

Angenommen, Sie haben eine Tabelle namens „Studenten“ mit den folgenden Spalten: „ID“, „Name“ und „Durchschnitt“. Sie möchten die Studierenden mithilfe der CASE-Funktion nach ihrem GPA (Notendurchschnitt) bewerten. Sie können es folgendermaßen machen:

SELECT nombre,
       CASE
           WHEN promedio >= 90 THEN 'Sobresaliente'
           WHEN promedio >= 80 THEN 'Notable'
           WHEN promedio >= 70 THEN 'Bien'
           WHEN promedio >= 60 THEN 'Suficiente'
           ELSE 'Insuficiente'
       END AS clasificacion
FROM estudiantes;

In diesem Beispiel verwenden wir CASE, um den Durchschnitt jedes Schülers auszuwerten und ihm einen entsprechenden Rang zuzuweisen. Liegt der Durchschnitt größer oder gleich 90, erfolgt die Einstufung als „Hervorragend“. Liegt der Wert zwischen 80 und 89, wird er als „Bemerkenswert“ eingestuft usw. Liegt der Durchschnitt unter 60, wird die Note „Nicht ausreichend“ vergeben.

Beispiel 2: Produktkategorien zuweisen

Stellen Sie sich vor, Sie haben eine Tabelle namens „Produkte“ mit den Spalten „ID“, „Name“ und „Preis“. Sie möchten jedem Produkt anhand seines Preises mithilfe der CASE-Funktion eine Kategorie zuordnen. Sie können es folgendermaßen machen:

SELECT nombre,
       CASE
           WHEN precio > 1000 THEN 'Premium'
           WHEN precio > 500 THEN 'Gama alta'
           WHEN precio > 100 THEN 'Gama media'
           ELSE 'Económico'
       END AS categoria
FROM productos;

In diesem Beispiel verwenden wir CASE, um den Preis jedes Produkts zu bewerten und eine entsprechende Kategorie zuzuordnen. Wenn der Preis über 1000 liegt, wird es als „Premium“ klassifiziert. Liegt er zwischen 500 und 1000, wird es als „High-End“ klassifiziert und so weiter. Wenn der Preis kleiner oder gleich 100 ist, wird es als „wirtschaftlich“ eingestuft.

Beispiel 3: Rabatte auf Basis der gekauften Menge berechnen

Angenommen, Sie haben eine Tabelle namens „Verkäufe“ mit den Spalten „ID“, „Produkt“ und „Menge“. Sie möchten den auf jeden Verkauf gewährten Rabatt auf Grundlage der gekauften Menge mithilfe der CASE-Funktion berechnen. Sie können es folgendermaßen machen:

SELECT producto,
       CASE
           WHEN cantidad >= 100 THEN 0.20
           WHEN cantidad >= 50 THEN 0.15
           WHEN cantidad >= 20 THEN 0.10
           ELSE 0
       END AS descuento
FROM ventas;

In diesem Beispiel verwenden wir CASE, um die gekaufte Menge jedes Produkts auszuwerten und den entsprechenden Rabatt zu berechnen. Wenn die Menge größer oder gleich 100 ist, wird ein Rabatt von 20 % gewährt. Liegt der Wert zwischen 50 und 99, wird ein Rabatt von 15 % gewährt usw. Bei einer Stückzahl unter 20 erfolgt kein Rabatt.

Beispiel 4: Umwandeln numerischer Werte in Bereiche

Stellen Sie sich vor, Sie haben eine Tabelle namens „Mitarbeiter“ mit den Spalten „ID“, „Name“ und „Alter“. Sie möchten das Alter der Mitarbeiter mithilfe der CASE-Funktion in Bereiche umwandeln. Sie können es folgendermaßen machen:

SELECT nombre,
       CASE
           WHEN edad >= 60 THEN 'Senior'
           WHEN edad >= 40 THEN 'Mediana edad'
           WHEN edad >= 20 THEN 'Joven'
           ELSE 'Menor de edad'
       END AS rango_edad
FROM empleados;

In diesem Beispiel verwenden wir CASE, um das Alter jedes Mitarbeiters auszuwerten und einen entsprechenden Bereich zuzuordnen. Bei einem Alter größer oder gleich 60 Jahren erfolgt die Einstufung als „Senior“. Wenn Sie zwischen 40 und 59 Jahre alt sind, werden Sie als „mittleres Alter“ eingestuft und so weiter. Bei einem Alter unter 20 Jahren handelt es sich um die Einstufung „minderjährig“.

  Programme zur Datenbankerstellung: Eine vollständige Anleitung

Beispiel 5: Zuweisen von Beschriftungen basierend auf mehreren Bedingungen

Angenommen, Sie haben eine Tabelle namens „Bestellungen“ mit den Spalten „ID“, „Kunde“, „Gesamt“ und „Status“. Sie möchten jeder Bestellung auf Grundlage ihres Gesamtbetrags und Status mithilfe der CASE-Funktion mit mehreren Bedingungen Beschriftungen zuweisen. Sie können es folgendermaßen machen:

SELECT cliente,
       CASE
           WHEN total > 1000 AND estado = 'Entregado' THEN 'VIP'
           WHEN total > 500 AND estado = 'Entregado' THEN 'Prioritario'
           WHEN estado = 'Pendiente' THEN 'En proceso'
           ELSE 'Regular'
       END AS etiqueta
FROM pedidos;

In diesem Beispiel verwenden wir CASE mit mehreren Bedingungen, um sowohl den Gesamtbetrag als auch den Status jeder Bestellung auszuwerten und eine entsprechende Bezeichnung zuzuweisen. Wenn die Summe größer als 1000 ist und der Status „Geliefert“ lautet, erfolgt die Kennzeichnung als „VIP“. Wenn die Summe über 500 liegt und der Status „Geliefert“ lautet, wird die Nachricht mit „Priorität“ gekennzeichnet. Wenn der Status „Ausstehend“ lautet, wird er als „In Bearbeitung“ gekennzeichnet. Andernfalls wird es als „Regular“ gekennzeichnet.

Beispiel 6: Umgang mit Nullwerten mit CASE

Stellen Sie sich vor, Sie haben eine Tabelle namens „Kunden“ mit den Spalten „ID“, „Name“ und „E-Mail“. Für manche Kunden ist möglicherweise keine E-Mail-Adresse hinterlegt, was zu Nullwerten in der Spalte „E-Mail“ führen würde. Um diese Nullwerte entsprechend zu behandeln, können Sie die CASE-Funktion nutzen. Zum Beispiel:

SELECT nombre,
       CASE
           WHEN email IS NULL THEN 'Sin correo electrónico'
           ELSE email
       END AS informacion_contacto
FROM clientes;

In diesem Beispiel verwenden wir CASE, um zu prüfen, ob die Spalte „E-Mail“ null ist. Wenn null, wird der Text „Keine E-Mail“ angezeigt. Andernfalls wird der tatsächliche Wert der Spalte „E-Mail“ angezeigt. Auf diese Weise können wir Fälle, in denen Kontaktinformationen fehlen, elegant bearbeiten.

Beispiel 7: Kombinieren von CASE mit Aggregatfunktionen

Die CASE-Funktion kann auch mit Aggregatfunktionen wie SUM, AVG, COUNT usw. kombiniert werden. Angenommen, Sie haben eine Tabelle namens „Verkäufe“ mit den Spalten „ID“, „Produkt“, „Menge“ und „Preis“. Sie möchten den Gesamtumsatz nach Produktkategorie mithilfe von CASE und SUM berechnen. Sie können es folgendermaßen machen:

SELECT
    SUM(CASE WHEN precio > 1000 THEN cantidad ELSE 0 END) AS ventas_premium,
    SUM(CASE WHEN precio <= 1000 THEN cantidad ELSE 0 END) AS ventas_regulares
FROM ventas;

In diesem Beispiel verwenden wir CASE innerhalb der SUM-Funktion, um den Gesamtumsatz nach Produktkategorie zu berechnen. Wenn der Preis größer als 1000 ist, wird der Betrag zu „premium_sales“ hinzugefügt. Wenn der Preis kleiner oder gleich 1000 ist, wird der Betrag zu „regular_sales“ hinzugefügt. Dadurch können wir Zwischensummen basierend auf bestimmten Bedingungen ermitteln.

Beispiel 8: Verwenden von CASE in WHERE-Klauseln

Die CASE-Funktion kann auch in der WHERE-Klausel verwendet werden, um Datensätze basierend auf bestimmten Bedingungen zu filtern. Angenommen, Sie haben eine Tabelle namens „Mitarbeiter“ mit den Spalten „ID“, „Name“, „Abteilung“ und „Gehalt“. Sie möchten Mitarbeiter ansprechen, deren Gehalt über dem Durchschnitt ihrer Abteilung liegt. Sie können es folgendermaßen machen:

SELECT nombre, departamento, salario
FROM empleados
WHERE salario > (
    SELECT AVG(CASE WHEN e.departamento = empleados.departamento THEN e.salario ELSE NULL END)
    FROM empleados e
);

In diesem Beispiel verwenden wir CASE in der Unterabfrage, um das Durchschnittsgehalt nach Abteilung zu berechnen. Die Unterabfrage vergleicht die Abteilung jedes Mitarbeiters mit der aktuellen Abteilung und berücksichtigt zur Berechnung des Durchschnitts nur die Gehälter der Mitarbeiter in der gleichen Abteilung. Anschließend filtern wir in der Hauptabfrage die Mitarbeiter heraus, deren Gehalt höher ist als der für ihre Abteilung berechnete Durchschnitt.

Beispiel 9: Erstellen berechneter Spalten mit CASE

Mit der CASE-Funktion können auch berechnete Spalten basierend auf bestimmten Bedingungen generiert werden. Angenommen, Sie haben eine Tabelle namens „Bestellungen“ mit den Spalten „ID“, „Kunde“, „Gesamt“ und „Datum“. Sie möchten eine zusätzliche Spalte mit dem Namen „Rabatt“ erstellen, die je nach Bestellsumme unterschiedliche Rabattprozentsätze anwendet. Sie können es folgendermaßen machen:

SELECT id, cliente, total,
       CASE
           WHEN total > 1000 THEN total * 0.10
           WHEN total > 500 THEN total * 0.05
           ELSE 0
       END AS descuento,
       fecha
FROM pedidos;

In diesem Beispiel verwenden wir CASE, um die berechnete Spalte „Rabatt“ zu generieren. Bei einer Gesamtbestellmenge über 1000 wird ein Rabatt von 10 % gewährt. Wenn die Summe über 500 liegt, wird ein Rabatt von 5 % gewährt. In allen anderen Fällen wird kein Rabatt gewährt. Diese berechnete Spalte kann für weitere Analysen oder zum Anzeigen zusätzlicher Informationen in den Abfrageergebnissen verwendet werden.

  Die Bedeutung von Datenbanken in der Geschäftswelt

Beispiel 10: Implementierung komplexer Logik mit verschachtelten CASE-Anweisungen

In einigen Fällen müssen Sie möglicherweise eine komplexere bedingte Logik mithilfe verschachtelter CASE-Anweisungen implementieren. Angenommen, Sie haben eine Tabelle namens „Studenten“ mit den Spalten „ID“, „Name“, „Mathematiknote“ und „Sprachnote“. Sie möchten jedem Schüler auf Grundlage seiner Noten in Mathematik und Sprachen eine Kategorie zuweisen. Sie können es folgendermaßen machen:

SELECT nombre,
       CASE
           WHEN nota_matematicas >= 90 AND nota_lenguaje >= 90 THEN 'Excelente'
           WHEN nota_matematicas >= 80 AND nota_lenguaje >= 80 THEN 'Notable'
           ELSE
               CASE
                   WHEN nota_matematicas >= 70 OR nota_lenguaje >= 70 THEN 'Regular'
                   ELSE 'Necesita mejorar'
               END
       END AS categoria
FROM estudiantes;

In diesem Beispiel verwenden wir verschachtelte CASE-Anweisungen, um komplexere bedingte Logik zu implementieren. Zunächst wird geprüft, ob die Mathematik- und Sprachnote beide größer oder gleich 90 sind. Wenn das der Fall ist, wird die Note „Sehr gut“ vergeben. Anschließend wird ausgewertet, ob beide Noten größer oder gleich 80 sind. Wenn das der Fall ist, wird die Kategorie „Bemerkenswert“ vergeben. Wenn keine der oben genannten Bedingungen erfüllt ist, wechseln wir zur nächsten Ebene des verschachtelten CASE. Hierbei wird ausgewertet, ob mindestens eine Note (Mathematik oder Sprache) größer oder gleich 70 ist. Wenn ja, wird die Kategorie „Regulär“ vergeben. Wenn keine der Bedingungen erfüllt ist, wird die Kategorie „Verbesserungsbedürftig“ zugewiesen.

Beispiel 11: Abfragen mit CASE optimieren

Mit der CASE-Funktion können auch Abfragen optimiert und mehrere separate Abfragen vermieden werden. Angenommen, Sie haben eine Tabelle namens „Verkäufe“ mit den Spalten „ID“, „Produkt“, „Menge“ und „Datum“. Sie möchten den Gesamtumsatz pro Monat und den Gesamtumsatz pro Jahr in einer einzigen Abfrage erhalten. Sie können es folgendermaßen machen:

SELECT
    SUM(CASE WHEN MONTH(fecha) = 1 THEN cantidad ELSE 0 END) AS ventas_enero,
    SUM(CASE WHEN MONTH(fecha) = 2 THEN cantidad ELSE 0 END) AS ventas_febrero,
    -- ... (continúa para los demás meses)
    SUM(CASE WHEN YEAR(fecha) = 2022 THEN cantidad ELSE 0 END) AS ventas_2022,
    SUM(CASE WHEN YEAR(fecha) = 2023 THEN cantidad ELSE 0 END) AS ventas_2023
FROM ventas;

In diesem Beispiel verwenden wir CASE innerhalb der SUM-Funktion, um die Verkaufssummen nach Monat und Jahr in einer einzigen Abfrage zu berechnen. Wir prüfen für jeden Monat, ob der Monat des Verkaufsdatums mit dem jeweiligen Monat übereinstimmt und addieren den entsprechenden Betrag. Ebenso prüfen wir für jedes Jahr, ob das Verkaufsdatum mit dem jeweiligen Jahr übereinstimmt und addieren den entsprechenden Betrag. Dadurch können wir alle Gesamtsummen in einer effizienten Abfrage erhalten.

Bewährte Methoden bei der Verwendung von CASE in MySQL

  • Verwenden Sie CASE nur, wenn es unbedingt nötig ist, und vermeiden Sie eine übermäßige Verwendung, da eine übermäßige Verwendung die Abfrageleistung beeinträchtigen kann.
  • Versuchen Sie, CASE-Ausdrücke so einfach und lesbar wie möglich zu halten. Wenn die Logik zu komplex wird, können Sie sie in mehrere CASE-Ausdrücke aufteilen oder Unterabfragen verwenden.
  • Verwenden Sie CASE in Kombination mit anderen MySQL-Klauseln und -Funktionen, um deren Potenzial voll auszuschöpfen, wie zum Beispiel in WHERE, ORDER BY, GRUPPIERE NACH und Aggregatfunktionen.
  • Seien Sie vorsichtig, wenn Sie mehrere CASE-Ausdrücke verschachteln, da dies die Lesbarkeit und Wartung Ihres Codes erschweren kann. Fügen Sie bei Bedarf erläuternde Kommentare hinzu.

Typische Fehler bei der Verwendung von CASE und wie Sie diese vermeiden

  • Vergessen Sie die ELSE-Klausel: Denken Sie unbedingt daran, die ELSE-Klausel einzuschließen, um Fälle zu behandeln, in denen keine der Bedingungen erfüllt ist. Wenn nicht angegeben, wird standardmäßig NULL zugewiesen.
  • Beenden Sie den CASE-Ausdruck nicht mit END: Denken Sie daran, den CASE-Ausdruck immer mit dem Schlüsselwort END zu beenden. Andernfalls erhalten Sie einen Syntaxfehler.
  • Verwenden inkompatibler Datentypen: Stellen Sie sicher, dass die von jeder WHEN-Bedingung zurückgegebenen Ergebnisse vom gleichen Datentyp sind. Wenn Sie Datentypen mischen, können unerwartete Ergebnisse oder Fehler auftreten.
  • Die Reihenfolge der Bedingungen wird nicht berücksichtigt: Bedingungen in CASE werden in der Reihenfolge ausgewertet, in der sie auftreten. Um die gewünschten Ergebnisse zu erzielen, platzieren Sie unbedingt die spezifischeren Bedingungen vor den allgemeineren.
  Gespeicherte Prozeduren in MySQL: Wie werden sie verwendet?

Alternativen zu CASE in MySQL

Obwohl CASE eine leistungsstarke Funktion ist, gibt es einige Alternativen, die Sie in bestimmten Fällen in Betracht ziehen könnten:

  • IF-Ausdrücke: The IF-Funktion in MySQL ermöglicht Ihnen, eine Bedingung auszuwerten und einen Wert zurückzugeben, wenn die Bedingung erfüllt ist, und einen anderen Wert, wenn sie falsch ist. Es ist eine einfachere Alternative für Fälle mit einzigartigen Bedingungen.
  • Nachschlagetabellen: In einigen Fällen können Sie separate Nachschlagetabellen verwenden, um die Bedingungen und die entsprechenden Ergebnisse zu speichern. Sie können diese Tabellen dann mit der Haupttabelle verknüpfen, um die gewünschten Ergebnisse zu erhalten.
  • Gespeicherte Ansichten oder Funktionen: Wenn Sie komplexe Abfragen haben, die CASE auf wiederkehrender Basis verwenden, können Sie die Erstellung von Ansichten oder Gespeicherte Funktionen um diese Logik zu kapseln und nachfolgende Abfragen zu vereinfachen.

Häufig gestellte Fragen zu CASE in MySQL

1. Kann ich CASE in Kombination mit anderen MySQL-Funktionen verwenden?

Ja, Sie können CASE in Kombination mit anderen MySQL-Funktionen verwenden, z. B. Aggregatfunktionen (SUM, AVG, COUNT usw.), Datums- und Zeitfunktionen (YEAR, MONTH, DAY usw.), Zeichenfolgenfunktionen (CONCAT, SUBSTRING, LENGTH usw.) und mehr.

2. Gibt es eine Begrenzung für die Anzahl der WHEN-Bedingungen, die ich in einem CASE-Ausdruck verwenden kann?

Es gibt keine bestimmte Beschränkung hinsichtlich der Anzahl von WHEN-Bedingungen, die Sie in einem CASE-Ausdruck verwenden können. Bedenken Sie jedoch, dass eine Vielzahl von Bedingungen die Lesbarkeit des Codes und die Abfrageleistung beeinträchtigen können. Wenn Sie viele Bedingungen haben, sollten Sie die Logik vereinfachen oder in mehrere CASE-Ausdrücke aufteilen.

3. Kann ich Unterabfragen innerhalb eines CASE-Ausdrucks verwenden?

Ja, Sie können Unterabfragen innerhalb eines CASE-Ausdrucks sowohl in WHEN-Bedingungen als auch in THEN-Ergebnissen verwenden. Dadurch können Sie komplexere Berechnungen oder Vergleiche auf Basis der Ergebnisse anderer Abfragen durchführen.

4. Wie kann ich Nullwerte in einem CASE-Ausdruck behandeln?

Sie können Nullwerte in einem CASE-Ausdruck mit der Bedingung IS NULL oder IS NOT NULL behandeln. Sie können beispielsweise CASE WHEN column IS NULL THEN 'Null value' ELSE column END verwenden, um einen bestimmten Wert zuzuweisen, wenn die Spalte null ist, und den tatsächlichen Wert zurückzugeben, wenn dies nicht der Fall ist.

Fallzusammenfassungen in MySQL

Die CASE-Funktion in MySQL ist ein leistungsstarkes und vielseitiges Tool, mit dem Sie bedingte Operationen innerhalb Ihrer Abfragen durchführen können. Mit CASE können Sie verschiedene Bedingungen auswerten und bestimmte Ergebnisse zurückgeben, je nachdem, ob diese Bedingungen erfüllt sind oder nicht. Die in diesem Artikel vorgestellten Beispiele bieten Ihnen eine solide Grundlage, um CASE in Ihren eigenen Abfragen zu verwenden und an Ihre spezifischen Anforderungen anzupassen.

Beachten Sie bei der Verwendung von CASE die Best Practices, z. B. einfache und lesbare Ausdrücke, die Kombination von CASE mit anderen MySQL-Klauseln und -Funktionen sowie gegebenenfalls Alternativen. Mit etwas Übung und Experimentierfreude können Sie CASE in MySQL optimal nutzen und die Effizienz und Lesbarkeit Ihrer Abfragen verbessern.

Wenn Sie weitere Fragen haben oder weitere Beispiele benötigen, können Sie nach weiteren Ressourcen suchen oder die offizielle MySQL-Dokumentation konsultieren. Erkunden und nutzen Sie weiterhin die Leistungsfähigkeit von CASE in Ihren Datenbankprojekten!

Zusätzliche Ressourcen: