
Verbesserung von Redshift-Abfragen mit CASE WHEN-Ausdrücken

Einführung
Bei der Verwendung des Amazon Redshift-Datenlagers müssen Sie möglicherweise bedingte Logik verwenden, um Ihre Daten abzufragen und zu transformieren. Der Ausdruck ‘CASE WHEN’ hilft dabei, Bedingungen auszuwerten und unterschiedliche Ergebnisse zu liefern, je nachdem, ob die Bedingungen wahr oder falsch sind.
In diesem Artikel gehen wir auf die Grundlagen der Verwendung von ‘CASE WHEN’-Ausdrücken in Redshift SQL ein. Wir werden auch die ELSE-Anweisung während der Diskussion behandeln. Sie lernen die Syntax, sehen Beispiele und verstehen häufige Anwendungsfälle. Am Ende sind Sie in der Lage, diese grundlegende SQL-Bedingungslogik in Ihren eigenen Redshift-Abfragen zu nutzen.
CASE WHEN-Syntax
Die allgemeine Syntax für einen CASE WHEN-Ausdruck in Redshift ist:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
So funktioniert es:
- Das Schlüsselwort CASE signalisiert den Beginn des Bedingungsausdrucks
- Sie geben eine oder mehrere WHEN-Klauseln an, die jeweils eine zu bewertende Bedingung enthalten
- Für die erste Bedingung, die als wahr bewertet wird, wird das entsprechende THEN-Ergebnis zurückgegeben
- Wenn keine der Bedingungen wahr ist, wird das ELSE default_result zurückgegeben
- Das Schlüsselwort END signalisiert das Ende des CASE-Ausdrucks
Lassen Sie uns ein einfaches Beispiel betrachten, um das zu veranschaulichen. Stellen Sie sich eine “users”-Tabelle mit Spalten für id, name und age vor. Um Benutzer basierend auf dem 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, 'abgeschlossen'), (2, 102, '2023-02-10', 75.50, 'ausstehend'), (3, 101, '2023-03-01', 200.00, 'abgeschlossen'), (4, 103, '2023-03-05', 120.00, 'storniert'), (5, 102, '2023-04-12', 300.00, 'abgeschlossen');
Dieser einfache Ausdrucken erstellt eine “orders”-Tabelle mit einigen Beispieldaten, auf denen wir nun CASE-Ausdrücke ausführen können.
Verwendung von CASE zur Ableitung 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”. Der Bereich von Bestellungen zwischen $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 im Verständnis hilft.
SELECT order_id, customer_id, total, CASE WHEN total < 100 THEN 'klein' WHEN total < 250 THEN 'mittel' ELSE 'groß' END AS order_size FROM orders;
Dies würde folgendes zurückgeben:
order_id | customer_id | total | order_size ---------------------------------------------- 1 | 101 | 150.00 | mittel 2 | 102 | 75.50 | klein 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 der kleinen, mittleren und großen 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, was dann von COUNT() summiert wird.
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. Zum Beispiel, um 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 den Kunden 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 NULL-Werte durch Standardwerte zu ersetzen oder um unterschiedliche Logik anzuwenden, wenn ein Wert NULL ist.
Beispielsweise, wenn unsere “orders”-Tabelle eine “shipped_date”-Spalte hätte, die NULL sein könnte, wenn die Bestellung noch nicht versandt wurde. Um ‘Nicht versandt’ für diese Bestellungen zurückzugeben:
SELECT order_id, status, CASE WHEN shipped_date IS NULL THEN 'Nicht versandt' ELSE CAST(shipped_date AS VARCHAR(10)) END AS shipped FROM orders;
Dies prüft, ob shipped_date NULL ist, und falls ja, wird ‘Nicht versandt’ zurückgegeben. Andernfalls wird das shipped_date in einen String umgewandelt, um zurückgegeben zu werden. Hier sollten wir beachten, dass die Verwendung von NVL oder COALESCE möglicherweise die 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 Logiken abzubilden
- Die ELSE-Klausel ist optional, und wenn sie weggelassen wird, wird NULL zurückgegeben, wenn keine Bedingungen übereinstimmen
- 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 den Datentypen – die Ergebnisse eines CASE-Ausdrucks sollten alle in einen gemeinsamen Datentyp konvertierbar sein
Zusammenfassung
CASE WHEN-Ausdrücke sind ein vielseitiges Werkzeug zur Anwendung bedingter Logik in Redshift SQL-Abfragen. Sie können verwendet werden, um neue Spalten abzuleiten, Daten zu aggregieren, Ergebnisse zu filtern, mit NULL-Werten umzugehen und vieles mehr.
Indem Sie die Syntax und die häufigen Anwendungsfälle verstehen, können Sie leistungsfähigere und effizientere SQL-Abfragen schreiben, um Ihre Daten in Redshift zu analysieren.
DataSunrise bietet benutzerfreundliche und flexible Werkzeuge für Datenbanksicherheit, Audit und Compliance, die nahtlos mit Amazon Redshift integriert sind. Besuchen Sie die DataSunrise-Website, um eine Online-Demo von unserem Expertenteam anzufordern.
Besuchen Sie die DataSunrise-Website, um eine Online-Demo von unserem Expertenteam anzufordern.