Direkt zum Inhalt

CASE-Anweisungen in PostgreSQL

In diesem Tutorium lernst du, wie du bedingte Abfragen in PostgreSQL mit dem PostgreSQL CASE-Ausdruck schreibst.
Aktualisierte 16. Jan. 2025  · 7 Min. Lesezeit

Bedingte Ausdrücke sind eines der grundlegendsten Elemente eines jeden Programmierparadigmas. Zu den üblichen bedingten Ausdrücken gehören if-else Blöcke und switch Fälle. Du kannst in PostgreSQL bedingte Ausdrücke formulieren, indem du WHEN-THEN case verwendest, das den if-else Blöcken sehr ähnlich ist. In diesem Lernprogramm erfährst du, wie das geht.

Bevor du mit dem Schreiben von Bedingungsabfragen beginnst, ist es wichtig, dass du eine lokale PostgreSQL-Datenbank einrichtest. Das wirst du im ersten Abschnitt dieses Tutorials tun.

Hinweis: Um diesem Lernprogramm folgen zu können, musst du die Grundlagen von SQL und PostgreSQL kennen. Mit den folgenden Ressourcen kannst du die Grundlagen auffrischen:

Eine PostgreSQL-Datenbank lokal einrichten

Du kannst diese Sicherungsdatei verwenden und sie auf deinem PostgreSQL-Server wiederherstellen. Wenn du wissen willst, wie du das machst, kannst du diesen Artikel lesen. Nachdem du die Sicherung erfolgreich wiederhergestellt hast, solltest du diese Tabellen in der Datenbank sehen können -

  • Länder
  • route_table
  • station_table
  • train_table

In diesem Lehrgang wird jedoch nur die Tabelle countries verwendet. Du kannst die Tabellen in der Datenbanksicherung erkunden. Vielleicht möchtest du auch deine eigenen Datenbanken und Tabellen erstellen. Wenn du das Datenbank-Backup wiederhergestellt hast, solltest du jetzt eine Tabelle (mit den Details zu den verschiedenen Ländern rund um den Globus) haben. Schauen wir uns nun kurz die Tabelle countries an.

Die Erkundung der countries Tabelle ganz kurz

Nachdem du die Datenbank wiederhergestellt hast, kannst du die Tabelle in der Oberfläche pgAdmin anzeigen, die mit der Standardinstallation von PostgreSQL geliefert wird. Wenn du eine einfache SELECT Anweisung ausführst, erfährst du etwas über die Spalten, ihre Datentypen und die Zeilen, die die Tabelle enthält.

Datenbank

Die Tabelle enthält Angaben zu insgesamt 206 verschiedenen Ländern aus unterschiedlichen Regionen der Welt. Wie viele Regionen genau? Die folgende Abfrage sollte dir die Antwort auf deine Frage geben.

SELECT COUNT(DISTINCT(region)) from countries;

In dieser Tabelle werden 23 verschiedene Regionen abgedeckt, z. B. Westeuropa, Polynesien, der Nahe Osten und so weiter. Du kannst die Tabelle mit deinen eigenen schnellen Fragen erkunden und dabei vielleicht interessante Fakten herausfinden. Sehen wir uns nun die Anatomie eines einfachen PostgreSQL CASE an.

Werde Dateningenieur

Werde ein Dateningenieur durch fortgeschrittenes Python-Lernen
Kostenloses Lernen beginnen

Einführung in PostgreSQL CASE

Im Folgenden wird die allgemeine Form eines PostgreSQL-Falls mit dem WHEN-THEN -Konstrukt beschrieben -

CASE
     WHEN condition_1  THEN result_1
     WHEN condition_2  THEN result_2
     ...
     ELSE  result_n
END

Hier sind einige wichtige Punkte, die du bei der Erstellung von CASEs in PostgreSQL beachten solltest:

  • Jede Bedingung ist ein boolescher Ausdruck und je nach Ausgabe wird das Ergebnis ausgewählt. Wenn alle Ausdrücke, die WHEN entsprechen, zu False ausgewertet werden, dann wird das Ergebnis für den ELSE Teil angezeigt. Wenn du den Teil ELSE nicht angibst, wird die Abfrage null zurückgeben.

  • Eine Bedingung wird in der Regel auf eine Spalte angewendet, die in der Tabelle vorhanden ist, die du bearbeitest. Bedingte Abfragekonstrukte wie die oben genannten werden in der Regel mit SELECT Anweisungen ausgeführt. Beachte, dass die Spalte in der SELECT Anweisung deiner Abfrage vorhanden sein muss, für die du die booleschen Ausdrücke angibst (in CASE). Aber wenn du CASE in Verbindung mit einer Where-Klausel verwendest, musst du das nicht beachten (mehr dazu später).

  • Der Datentyp der Ergebnisse muss einheitlich sein. Du kannst nicht ein string in result_1 und ein integer in result_2 und so weiter zurückgeben.

Schauen wir uns jetzt ein paar Beispiele an.

Writing PostgreSQL CASEs

Lass uns einfach anfangen. Du wirst nun eine CASE schreiben, um die Länder nach dem Jahr der Unabhängigkeit zu gruppieren. Unabhängigkeitsjahre werden in der Spalte indep_year eingetragen. Nehmen wir an, du hast drei Gruppen von Unabhängigkeitsjahren der Länder, die du verfolgen musst. Du wirst dafür drei Gruppen von Unabhängigkeitsjahren bilden -

  • Vor 1900 (indep_year < 1900)
  • Zwischen 1900 und 1930 (indep_year <= 1930)
  • Nach 1930 (indep_year > 1930)

Das Endergebnis der Abfrage sollte die folgenden Spalten enthalten -

  • Name (des Landes)
  • Kontinent (zu dem das Land gehört)
  • indep_year
  • Und die Gruppe der Unabhängigkeitsjahre, die du gründen wirst. Nennen wir sie indep_year_group.

Schreiben wir nun die Abfrage -

SELECT name, continent, indep_year,
    CASE WHEN indep_year < 1900 THEN 'before 1900'
         WHEN indep_year <= 1930 THEN 'between 1900 and 1930'
         ELSE 'after 1930' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

(Die Abfrage stammt aus dem DataCamp-Kurs " Joining Data in SQL ").

Wenn du die Abfrage ausführst, siehst du viele Länder wie Palästina, Puerto Rico usw., für die in der Tabelle kein Unabhängigkeitsjahr angegeben ist. Deshalb haben sie die Gruppe between 1900 and 1930.

PostgreSQL CASEs kann mehrere Bedingungen haben. Es gibt eine Handvoll Einträge in der Tabelle, bei denen der Name des Landes und der Hauptstadt identisch sind. Du kannst dies zu deinem zuvor erstellten CASE - hinzufügen.

SELECT name, continent, indep_year,
    CASE WHEN (indep_year < 1900) AND (countries.name = countries.capital) THEN 'before 1900 and capital same'
         WHEN indep_year <= 1930 AND (countries.name = countries.capital) THEN 'between 1900 and 1930 and capital same'
         ELSE 'after 1930_and_no_same_capital' END
         AS indep_year_group
FROM countries
ORDER BY indep_year_group;

Eine weitere spannende Sache an CASEist, dass du sie mit Aggregatfunktionen wie SUM() koppeln kannst. Um eine CASE mit der Aggregatfunktion SUM() zu implementieren, benötigst du eine andere Tabelle, in der dies sinnvoll sein könnte. Erstellen wir eine einfache Tabelle namens student_grades mit den folgenden Spalten und Datentypen -

  • student_name (string)
  • student_stream (string)
  • student_grade (character)

Die folgende Abfrage erstellt die Tabelle für dich -

CREATE TABLE student_grades
(student_name character varying,
student_stream character varying,
student_grade character);

Lass uns jetzt einige Datensätze in die Tabelle einfügen. Du kannst dies mit ein paar INSERT Anweisungen tun. Nehmen wir an, dass die Tabelle student_grades nach den Einfügungen nun die folgenden Datensätze enthält -

Tabelle

Jetzt schreibst du eine CASE, um die Summe der Schüler zu ermitteln, die zu bestimmten Klassenstufen gehören. Wie du siehst, gibt es nach den Instanzen der Tabelle drei verschiedene Klassen - A, B und C. Die bedingte Abfrage sollte eine Ausgabe ähnlich der folgenden liefern -

Tabelle

Die Abfrage für diese -

SELECT
 SUM (
 CASE
 WHEN student_grade = 'A' THEN
 1
 ELSE
 0
 END
 ) AS "High Scoring",
 SUM (
 CASE
 WHEN student_grade = 'B' THEN
 1
 ELSE
 0
 END
 ) AS "Mid Scoring",
 SUM (
 CASE
 WHEN student_grade = 'C' THEN
 1
 ELSE
 0
 END
 ) AS "Low Scoring"
FROM
 student_grades;

So kannst du CASE mit Aggregatfunktionen verknüpfen, um interessante Fakten über die Daten zu erhalten.

Fazit und weiterführende Literatur

Das ist alles für dieses Tutorial. In diesem Tutorial hast du gelernt, wie du if-then wie Konditionierung in deine SQL-Abfragen einbindest, um interessante Auswertungen zu erhalten. Du hast mehrere Beispiele durchgearbeitet, um diese Fähigkeit zu stärken. Wenn du auf der Suche nach anspruchsvolleren Übungen bist, solltest du die folgenden DataCamp-Kurse zu SQL besuchen -

Wenn du Fragen zu diesem Tutorial hast, kannst du sie mir gerne im Comments Bereich stellen.

Werde SQL-zertifiziert

Beweise mit einer Zertifizierung, dass deine SQL-Kenntnisse für den Job geeignet sind.
Themen

SQL-Kurse

Kurs

Introduction to SQL

2 hr
976K
Learn how to create and query relational databases using SQL in just two hours.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

Lehrer/innen und Schüler/innen erhalten das Premium DataCamp kostenlos für ihre gesamte akademische Laufbahn

Keine Hacks, keine Tricks. Schüler/innen und Lehrer/innen, lest weiter, um zu erfahren, wie ihr die Datenerziehung, die euch zusteht, kostenlos bekommen könnt.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

4 Min.

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Mehr anzeigenMehr anzeigen