DataSunrise erreicht AWS DevOps Kompetenz Status in AWS DevSecOps und Überwachung, Protokollierung, Performance

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

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

Redshift Case When

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.

Nächste

Snowflake LIMIT-Klausel: Praktische Hilfe für das Datenmanagement

Snowflake LIMIT-Klausel: Praktische Hilfe für das Datenmanagement

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Countryx
United States
United Kingdom
France
Germany
Australia
Afghanistan
Islands
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegovina
Botswana
Bouvet
Brazil
British Indian Ocean Territory
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Congo, Republic of the
Congo, The Democratic Republic of the
Cook Islands
Costa Rica
Cote D'Ivoire
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands (Malvinas)
Faroe Islands
Fiji
Finland
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guernsey
Guinea
Guinea-Bissau
Guyana
Haiti
Heard Island and Mcdonald Islands
Holy See (Vatican City State)
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran, Islamic Republic Of
Iraq
Ireland
Isle of Man
Israel
Italy
Jamaica
Japan
Jersey
Jordan
Kazakhstan
Kenya
Kiribati
Korea, Democratic People's Republic of
Korea, Republic of
Kuwait
Kyrgyzstan
Lao People's Democratic Republic
Latvia
Lebanon
Lesotho
Liberia
Libyan Arab Jamahiriya
Liechtenstein
Lithuania
Luxembourg
Macao
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia, Federated States of
Moldova, Republic of
Monaco
Mongolia
Montserrat
Morocco
Mozambique
Myanmar
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
Niue
Norfolk Island
North Macedonia, Republic of
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Palestinian Territory, Occupied
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn
Poland
Portugal
Puerto Rico
Qatar
Reunion
Romania
Russian Federation
Rwanda
Saint Helena
Saint Kitts and Nevis
Saint Lucia
Saint Pierre and Miquelon
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Serbia and Montenegro
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
South Georgia and the South Sandwich Islands
Spain
Sri Lanka
Sudan
Suriname
Svalbard and Jan Mayen
Swaziland
Sweden
Switzerland
Syrian Arab Republic
Taiwan, Province of China
Tajikistan
Tanzania, United Republic of
Thailand
Timor-Leste
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United States Minor Outlying Islands
Uruguay
Uzbekistan
Vanuatu
Venezuela
Viet Nam
Virgin Islands, British
Virgin Islands, U.S.
Wallis and Futuna
Western Sahara
Yemen
Zambia
Zimbabwe
Choose a topicx
Allgemeine Informationen
Vertrieb
Kundenservice und technischer Support
Partnerschafts- und Allianz-Anfragen
Allgemeine Informationen:
info@datasunrise.com
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
partner@datasunrise.com