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 usersJetzt 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.
Aufgabe
EinfachVerfü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_idtotal: Gesamtzahl der Bestellungen, die dieser Kunde aufgegeben hatshipped: Anzahl, bei denenstatus = 'shipped'istcancelled: Anzahl, bei denenstatus = '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 usersProbier 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
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.