COUNT mit CASE
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy. Lektion 12 von 27.
Du kannst einen CASE-Ausdruck innerhalb einer Aggregatfunktion verwenden. Der Trick besteht darin, dass COUNT NULL ignoriert. Daher zählt ein CASE ohne ELSE nur Zeilen, die die Bedingung erfüllen.
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 die gesamte Abfrage nicht gefiltert haben. Das ist der Trick hinter jeder Multi-Metrik-Dashboard-Abfrage, die du jemals schreiben wirst.
Aufgabe
EinfachVerfügbare Tabellen und Spalten:
orders:id,customer_id,status
Gib für jede customer_id Folgendes zurück:
customer_idtotal: Gesamtzahl der Bestellungen, die dieser Kunde aufgegeben hatshipped: Anzahl, bei derstatus = 'shipped'giltcancelled: Anzahl, bei derstatus = 'cancelled'gilt
Gib nur Kunden zurück, die mindestens eine stornierte Bestellung haben. Sortiere nach customer_id.
Probier es selbst
SELECT customer_id,
COUNT(*) AS total,
-- versendet, storniert mit COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- auf Kunden mit mindestens einer Stornierung filtern
ORDER BY customer_id
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
3Bedingte Aggregation
COUNT mit CASESUM mit CASEZeilen in Spalten umwandelnRückblick – Traffic-QuellenÜbe selbstständig: SQL-Playground