DataSunrise sponsert AWS re:Invent 2024 in Las Vegas, bitte besuchen Sie uns am Stand #2158 von DataSunrise

Redshift CASE WHEN: SQL-Bedingungen

Redshift CASE WHEN: SQL-Bedingungen

Redshift Case When

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.

Nächste

Snowflake LIMIT-Klausel

Snowflake LIMIT-Klausel

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Allgemeine Informationen:
[email protected]
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
[email protected]