PostgreSQL CASE-Anweisung für bedingte SQL-Abfragen verwenden

Die CASE-Anweisung in PostgreSQL ermöglicht es, innerhalb einer SQL-Abfrage Bedingungen auszuwerten und abhängig davon Werte zurückzugeben. Sie eignet sich besonders, um Daten dynamisch zu klassifizieren – beispielsweise zur Notenvergabe oder Zuordnung von Labels basierend auf Schwellenwerten.

Diese Anleitung zeigt dir, wie du mit der CASE-Klausel Daten aus einer Datenbank kategorisierst. Du wirst eine Beispieldatenbank mit Tabellen für Studierende und deren Ergebnisse erstellen und anschließend mit der CASE-Anweisung Noten aus Punktzahlen berechnen.

Voraussetzungen

Bevor du loslegst, stelle sicher, dass du folgendes eingerichtet hast:

  • Eine laufende PostgreSQL-Instanz mit Zugangsdaten
  • Ein Linux-System als Client
  • SSH-Zugang zum Server
  • Einen Benutzer mit sudo-Rechten (kein Root)
  • Installierten psql-Client

Funktionsweise der CASE-Anweisung in PostgreSQL

Die CASE-Struktur ist ein logischer Ausdruck, der innerhalb von SQL-Abfragen eingesetzt wird. Sie überprüft Bedingungen nacheinander und gibt den ersten zutreffenden Wert zurück. Das ermöglicht eine flexible Verarbeitung und Transformation von Daten direkt im SELECT-Befehl.

Ein CASE-Block besteht üblicherweise aus folgenden Elementen:

  • CASE: Startet den logischen Block
  • WHEN: Definiert eine Bedingung
  • THEN: Gibt den Wert zurück, wenn die Bedingung zutrifft
  • END: Beendet den CASE-Ausdruck

Beispiel für eine CASE-Anweisung innerhalb eines SELECT-Statements:

SELECT 
    column1,
    column2,
    CASE 
        WHEN condition1 THEN 'Wert A'
        WHEN condition2 THEN 'Wert B'
        ELSE 'Standardwert'
    END AS ergebnis_spalte
FROM deine_tabelle;

Zulässige Vergleichsoperatoren:

  • =: Gleich
  • <: Kleiner als
  • <=: Kleiner gleich
  • >: Größer als
  • >=: Größer gleich

Beispieldatenbank vorbereiten

Um das Verhalten der CASE-Anweisung zu zeigen, erstellen wir ein Schema mit zwei Tabellen: students und marks.

Mit dem PostgreSQL-Server verbinden

Stelle die Verbindung über den psql-Client her:

$ psql -h <host> -p <port> -U <username> defaultdb

Datenbank school erstellen

defaultdb=> CREATE DATABASE school;

Mit der neuen Datenbank verbinden

Tabelle students erstellen

Erzeuge eine Tabelle für die Stammdaten der Studierenden:

school=> CREATE TABLE students (
            student_id SERIAL PRIMARY KEY,
            first_name VARCHAR(50),
            last_name VARCHAR(50)
        );

Beispieldaten für Studierende einfügen

school=> INSERT INTO students (first_name, last_name) VALUES
          ('JOHN', 'DOE'),
          ('JANE', 'SMITH'),
          ('PETER', 'HENRY'),
          ('MARY', 'ANN'),
          ('JESSICA', 'WILLIAMS'),
          ('BOB', 'JAMES'),
          ('ESTHER', 'CHLOE');

Daten der Tabelle anzeigen

school=> SELECT student_id, first_name, last_name FROM students;

Ausgabe:

 student_id | first_name | last_name
------------+------------+-----------
        1   | JOHN       | DOE
        2   | JANE       | SMITH
        3   | PETER      | HENRY
        4   | MARY       | ANN
        5   | JESSICA    | WILLIAMS
        6   | BOB        | JAMES
        7   | ESTHER     | CHLOE
(7 rows)

Tabelle marks erstellen

Jetzt wird eine Tabelle für die Punktzahlen der Studierenden angelegt:

school=> CREATE TABLE marks (
            score_id SERIAL PRIMARY KEY,
            student_id INT,
            score INT
        );

Punktzahlen einfügen

school=> INSERT INTO marks (student_id, score) VALUES
          (1, 85),
          (2, 39),
          (3, 70),
          (4, 55),
          (5, 0),
          (6, 41),
          (7, 32);

Inhalt der marks-Tabelle anzeigen

school=> SELECT score_id, student_id, score FROM marks;

Ausgabe:

 score_id | student_id | score
----------+------------+-------
        1 |          1 |    85
        2 |          2 |    39
        3 |          3 |    70
        4 |          4 |    55
        5 |          5 |     0
        6 |          6 |    41
        7 |          7 |    32
(7 rows)

CASE-Anweisung zum Berechnen von Noten nutzen

Mit einer CASE-Konstruktion lassen sich Noten direkt aus den Punktzahlen berechnen. Dafür werden students und marks per LEFT JOIN verknüpft und abhängig von der Punktzahl eine Note zugeordnet.

school=> SELECT
             students.student_id,
             students.first_name,
             students.last_name,
             marks.score,
             CASE
                 WHEN marks.score >= 75 THEN 'Distinction'
                 WHEN marks.score >= 70 THEN 'Credit'
                 WHEN marks.score >= 40 THEN 'Pass'
                 ELSE 'Fail'
             END AS grade
         FROM marks
         LEFT JOIN students ON marks.student_id = students.student_id;

Notenschlüssel:

  • Distinction: ab 75 Punkten
  • Credit: 70–74 Punkte
  • Pass: 40–69 Punkte
  • Fail: unter 40 Punkte

Erwartete Ausgabe:

 student_id | first_name | last_name | score |    grade
------------+------------+-----------+-------+-------------
          1 | JOHN       | DOE       |    85 | Distinction
          2 | JANE       | SMITH     |    39 | Fail
          3 | PETER      | HENRY     |    70 | Credit
          4 | MARY       | ANN       |    55 | Pass
          5 | JESSICA    | WILLIAMS  |     0 | Fail
          6 | BOB        | JAMES     |    41 | Pass
          7 | ESTHER     | CHLOE     |    32 | Fail
(7 rows)

Dieses Beispiel zeigt, wie die CASE-Anweisung klar strukturiertes, bedingtes Verhalten innerhalb einer SQL-Abfrage ermöglicht – ideal zur Datenklassifikation oder regelbasierten Transformation.

Fazit

In dieser Einführung hast du gelernt, wie man mit PostgreSQL und der CASE-Anweisung eine einfache Datenbank erstellt und Punktzahlen in Noten umwandelt. Diese Technik eignet sich hervorragend für Berichte, Bewertungen oder andere konditionale Auswertungen. Für komplexere Logiken kannst du zusätzlich Mapping-Tabellen, IF-Statements oder semantische Werkzeuge wie pgvector in Betracht ziehen. Die offizielle Dokumentation von PostgreSQL bietet weitere Informationen zu bedingten Ausdrücken.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: