0Pricing
SQL Academy · Lektion

CASE-Ausdrücke und Pivot-Abfragen

Verwenden Sie CASE WHEN innerhalb von Aggregaten, um lange Tabellen in breite Kreuztabellenberichte umzuwandeln.

CASE-Ausdrücke und Pivot-Abfragen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

CASE: Inline-If/Else für SQL

CASE ist der ternäre Operator in SQL. Es gibt zwei Formen:

-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
     WHEN x < 0 THEN 'negative'
     ELSE 'zero' END

-- Simple CASE
CASE status
  WHEN 'A' THEN 'active'
  WHEN 'P' THEN 'pending'
  ELSE 'unknown'
END

CASE in SELECT

Eine abgeleitete Spalte berechnen:

SELECT id, total,
       CASE
         WHEN total >= 1000 THEN 'whale'
         WHEN total >=  100 THEN 'regular'
         ELSE 'small'
       END AS bucket
FROM orders;

CASE in WHERE und ORDER BY

Benutzerdefinierte Filterung und Sortierung:

-- Custom sort:
ORDER BY
  CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
  created_at DESC;

-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
           ELSE status IN ('pending','paid')
      END;

CASE innerhalb von Aggregatfunktionen: Bedingte Zählungen

Der klassische Pivot-Trick:

SELECT user_id,
       COUNT(*) AS total,
       SUM(CASE WHEN status = 'paid'      THEN 1 ELSE 0 END) AS paid,
       SUM(CASE WHEN status = 'pending'   THEN 1 ELSE 0 END) AS pending,
       SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;

FILTER: Saubere Alternative

Die FILTER-Klausel von PostgreSQL ist lesbarer:

SELECT user_id,
       COUNT(*)                                     AS total,
       COUNT(*) FILTER (WHERE status = 'paid')      AS paid,
       COUNT(*) FILTER (WHERE status = 'pending')   AS pending,
       COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;

Pivotieren von Monaten über Spalten

Long-Format mit CASE + Aggregatfunktion in Wide-Format umwandeln:

SELECT year,
       SUM(CASE WHEN month =  1 THEN revenue END) AS jan,
       SUM(CASE WHEN month =  2 THEN revenue END) AS feb,
       -- ...
       SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;

Pivotieren von Kategorien

Eine Zeile pro Benutzer, eine Spalte pro Status:

SELECT user_id,
       SUM(total) FILTER (WHERE status = 'paid')      AS paid_total,
       SUM(total) FILTER (WHERE status = 'pending')   AS pending_total
FROM orders GROUP BY user_id;

Einschränkungen von CASE-Pivots

Sie müssen die Zielspalten beim Schreiben kennen. Für dynamische Pivots generieren Sie das SQL in der Anwendung oder verwenden Sie prozedurales PL/pgSQL.

CASE vs. COALESCE / NULLIF

COALESCE = „erstes Nicht-NULL“. NULLIF = „NULL, wenn gleich“. CASE ist allgemeiner – verwenden Sie es, wenn COALESCE/NULLIF nicht passen.

Typkompatibilität

Alle CASE-Zweige müssen kompatible Datentypen liefern. Führen Sie bei gemischten Typen explizite Casts durch:

SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;

Verschachteltes CASE

Mehrstufige Verzweigung:

SELECT CASE
  WHEN amount IS NULL THEN 'no payment'
  WHEN amount = 0     THEN 'free'
  WHEN amount < 10    THEN 'cheap'
  ELSE
    CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;

Zusammenfassung

CASE ist das universelle „if/else“ in SQL.

  • Berechnete Spalten in SELECT
  • Pivots über CASE-in-Aggregatfunktion oder FILTER
  • Benutzerdefinierte Logik in WHERE / ORDER BY

Kurztest

Welche Klausel ist in PostgreSQL für bedingte Aggregationen am lesbarsten?

Häufig gestellte Fragen

Ist die Lektion „CASE-Ausdrücke und Pivot-Abfragen“ kostenlos?

Ja — der vollständige Text von „CASE-Ausdrücke und Pivot-Abfragen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „CASE-Ausdrücke und Pivot-Abfragen“?

Verwenden Sie CASE WHEN innerhalb von Aggregaten, um lange Tabellen in breite Kreuztabellenberichte umzuwandeln. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „CASE-Ausdrücke und Pivot-Abfragen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. UNION, INTERSECT, EXCEPT
  2. UNION ALL vs. UNION (Kosten der Duplikatentfernung)
  3. CASE-Ausdrücke und Pivot-Abfragen
  4. Crosstab-Muster (PostgreSQL crosstab())
← Zurück zu SQL Academy