Menu
Coddy logo textTech

COUNT mit CASE

Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy — Lektion 12 von 27.

Sie können einen CASE-Ausdruck innerhalb eines Aggregats verwenden. Der Trick dabei ist, dass COUNT den Wert NULL ignoriert, sodass ein CASE ohne ELSE nur Zeilen zählt, die der Bedingung entsprechen.

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

Jetzt ist active_count die Anzahl der 'active' Zeilen, obwohl wir nicht die gesamte Abfrage gefiltert haben. Dies ist der Trick hinter jeder Multi-Metrik-Dashboard-Abfrage, die Sie jemals schreiben werden.

challenge icon

Aufgabe

Einfach

Verfügbare Tabellen und Spalten:

  • <strong>orders</strong>: <strong>id</strong>, <strong>customer_id</strong>, <strong>status</strong>

Geben Sie für jede customer_id Folgendes zurück:

  • customer_id
  • total: Gesamtzahl der Bestellungen, die dieser Kunde aufgegeben hat
  • shipped: Anzahl, bei denen status = 'shipped' ist
  • cancelled: Anzahl, bei denen status = 'cancelled' ist

Geben Sie nur Kunden zurück, die mindestens eine stornierte Bestellung haben. Sortieren Sie nach customer_id.

Spickzettel

Verwenden Sie CASE innerhalb von COUNT, um Zeilen zu zählen, die einer Bedingung entsprechen, ohne die gesamte Abfrage zu filtern (COUNT ignoriert NULL, lassen Sie also die ELSE-Klausel weg):

SELECT
    COUNT(*) AS total,
    COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM users

Probier es selbst

SELECT customer_id,
       COUNT(*) AS total,
       -- shipped, cancelled unter Verwendung von COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- Filtere nach Kunden mit mindestens einer Stornierung
ORDER BY customer_id
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Über die Grundlagen hinaus