Redshift CASE WHEN: SQL-Bedingungen
Einführung
Beim Verwenden von Amazons Redshift-Datenwarehouse müssen Sie möglicherweise bedingte Logik verwenden, um Ihre Daten abzufragen und zu transformieren. Der Ausdruck ‘CASE WHEN’ hilft, Bedingungen auszuwerten und unterschiedliche Ergebnisse zurückzugeben, je nachdem, ob die Bedingungen wahr oder falsch sind.
In diesem Artikel werden wir die Grundlagen der Verwendung von ‘CASE WHEN’-Ausdrücken in Redshift-SQL untersuchen. Wir werden während der Diskussion auch die ELSE-Anweisung behandeln. Sie lernen die Syntax, sehen Beispiele und verstehen häufige Anwendungsfälle. Am Ende sind Sie in der Lage, diese wesentliche SQL-Bedingungs-Logik in Ihren eigenen Redshift-Abfragen zu nutzen.
CASE WHEN Syntax
Die allgemeine Syntax für einen CASE WHEN Ausdruck in Redshift lautet:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
So funktioniert es:
- Das Schlüsselwort CASE signalisiert den Beginn des bedingten Ausdrucks
- Sie geben eine oder mehrere WHEN-Klauseln an, die jeweils eine Bedingung zur Auswertung enthalten
- Für die erste Bedingung, die wahr ist, wird das entsprechende THEN-Ergebnis zurückgegeben
- Falls keine der Bedingungen wahr ist, wird das ELSE-Standardergebnis zurückgegeben
- Das Schlüsselwort END signalisiert das Ende des CASE-Ausdrucks
Schauen wir uns ein einfaches Beispiel an, um dies zu veranschaulichen. Stellen Sie sich eine “users”-Tabelle mit Spalten für id, name und age vor. Um Benutzer basierend auf ihrem Alter als ‘Kind’, ‘Erwachsener’ oder ‘Senior’ zu kategorisieren, könnten Sie Folgendes verwenden:
SELECT id, name, CASE WHEN age < 18 THEN 'Kind' WHEN age < 65 THEN 'Erwachsener' ELSE 'Senior' END AS age_category FROM users;
Dies würde jede Zeile auswerten, das Alter des Benutzers überprüfen und die entsprechende age_category zurückgeben.
Erstellen von Beispieldaten
Um komplexere CASE WHEN-Beispiele zu demonstrieren, erstellen wir zunächst einige Beispieldaten, mit denen wir arbeiten können. Führen Sie das folgende SQL in Redshift aus, um eine “orders”-Tabelle zu erstellen:
CREATE TABLE orders ( order_id INT, customer_id INT, order_date DATE, total DECIMAL(10,2), status VARCHAR(20) ); INSERT INTO orders VALUES (1, 101, '2023-01-15', 150.00, 'completed'), (2, 102, '2023-02-10', 75.50, 'pending'), (3, 101, '2023-03-01', 200.00, 'completed'), (4, 103, '2023-03-05', 120.00, 'cancelled'), (5, 102, '2023-04-12', 300.00, 'completed');
Dieser einfache CASE-Ausdruck erstellt eine Bestelltabelle mit einigen Beispielaufzeichnungen, auf denen wir nun CASE-Ausdrücke ausführen können.
Verwendung von CASE zum Ableiten neuer Spalten
CASE-Anweisungen können verwendet werden, um neue Spalten in einem Datensatz zu erstellen, indem vorhandene Daten kategorisiert werden. Beim Organisieren von Bestellungen nach Gesamtbetrag kann eine CASE-Anweisung die Regeln für jede Gruppe festlegen.
Bestellungen unter $100 sind “Geringer Wert”. Bestellungen im Bereich von $100 und $500 sind “Mittlerer Wert”. Bestellungen über $500 sind “Hoher Wert”. Sie können Daten in einem Datensatz leicht kategorisieren, indem Sie eine CASE-Anweisung verwenden, die bei der Analyse und dem Verständnis hilft.
SELECT order_id, customer_id, total, CASE WHEN total < 100 THEN 'gering' WHEN total < 250 THEN 'mittel' ELSE 'groß' END AS order_size FROM orders;
Dies würde zurückgeben:
order_id | customer_id | total | order_size ---------------------------------------------- 1 | 101 | 150.00 | mittel 2 | 102 | 75.50 | gering 3 | 101 | 200.00 | mittel 4 | 103 | 120.00 | mittel 5 | 102 | 300.00 | groß
Aggregation mit CASE
CASE-Ausdrücke sind auch sehr nützlich innerhalb von Aggregatfunktionen wie SUM() und COUNT(). Zum Beispiel, um die Anzahl kleiner, mittlerer und großer Bestellungen zu zählen:
SELECT COUNT(CASE WHEN total < 100 THEN 1 END) AS small_orders, COUNT(CASE WHEN total >= 100 AND total < 250 THEN 1 END) AS medium_orders, COUNT(CASE WHEN total >= 250 THEN 1 END) AS large_orders FROM orders;
Dies würde zurückgeben:
small_orders | medium_orders | large_orders -------------------------------------------- 1 | 3 | 1
Innerhalb jeder COUNT()-Funktion gibt CASE 1 zurück, wenn die Bedingung erfüllt ist, die COUNT() dann addiert.
CASE in WHERE- und HAVING-Klauseln
Sie können CASE-Ausdrücke auch in WHERE und HAVING-Klauseln verwenden, um Ergebnisse basierend auf bedingter Logik zu filtern. Um beispielsweise alle Kunden zu finden, die eine ‘große’ Bestellung aufgegeben haben:
SELECT DISTINCT customer_id FROM orders WHERE CASE WHEN total >= 250 THEN 'groß' ELSE 'nicht groß' END = 'groß';
Dies würde Kunde 102 zurückgeben, da er der einzige ist, der eine ‘große’ Bestellung über $250 hat.
Umgang mit NULL-Werten
CASE-Ausdrücke sind auch nützlich zum Umgang mit NULL-Werten. Sie können CASE verwenden, um NULLs durch einen Standardwert zu ersetzen oder eine andere Logik anzuwenden, wenn ein Wert NULL ist.
Betrachten wir beispielsweise, dass unsere “orders”-Tabelle eine “shipped_date”-Spalte hat, die NULL sein kann, wenn die Bestellung noch nicht verschickt wurde. Um ‘Nicht Verschickt’ für diese Bestellungen zurückzugeben:
SELECT order_id, status, CASE WHEN shipped_date IS NULL THEN 'Nicht Verschickt' ELSE CAST(shipped_date AS VARCHAR(10)) END AS shipped FROM orders;
Dies überprüft, ob shipped_date NULL ist und, falls dies der Fall ist, gibt ‘Nicht Verschickt’ zurück. Andernfalls wird das shipped_date in eine Zeichenkette umgewandelt, um zurückgegeben zu werden. Wir sollten hier darauf hinweisen, dass die Verwendung von NVL oder COALESCE möglicherweise eine bessere Wahl ist.
Tipps zur Verwendung von CASE WHEN
Hier sind einige Tipps, die Sie bei der Verwendung von CASE WHEN-Ausdrücken in Redshift beachten sollten:
- CASE-Ausdrücke können verschachtelt werden, um komplexere Logik zu erreichen
- Die ELSE-Klausel ist optional und wenn sie weggelassen wird, wird NULL zurückgegeben, wenn keine Bedingungen zutreffen
- CASE-Ausdrücke können fast überall in einer SQL-Anweisung verwendet werden, einschließlich SELECT, WHERE, HAVING, GROUP BY und ORDER BY-Klauseln
- Seien Sie vorsichtig mit Datentypen – die Ergebnisse eines CASE-Ausdrucks sollten alle in einen gemeinsamen Datentyp konvertierbar sein
Zusammenfassung
Der CASE WHEN-Ausdruck ist ein vielseitiges Werkzeug zur Anwendung bedingter Logik in Redshift-SQL-Abfragen. Sie können es verwenden, um neue Spalten abzuleiten, Daten zu aggregieren, Ergebnisse zu filtern, mit NULL-Werten umzugehen und vieles mehr.
Durch das Verständnis der Syntax und häufiger Anwendungsfälle können Sie leistungsfähigeres und effizienteres SQL schreiben, um Ihre Daten in Redshift zu analysieren.
DataSunrise bietet benutzerfreundliche und flexible Tools für Datenbanksicherheit, Audit und Compliance, die nahtlos mit Amazon Redshift integriert sind. Besuchen Sie die DataSunrise-Website, um einen Online-Demo von unserem Expertenteam anzufordern.
Besuchen Sie die DataSunrise-Website, um einen Online-Demo von unserem Expertenteam anzufordern.