SUM mit CASE
Teil des Abschnitts Über die Grundlagen hinaus der SQL-Journey von Coddy — Lektion 13 von 27.
Derselbe Ansatz funktioniert auch mit SUM: und er ist sogar noch flexibler. Das CASE-Statement kann 1 für übereinstimmende Zeilen und 0 für alles andere zurückgeben, oder es kann einen beliebigen numerischen Wert zurückgeben, um Zeilen unterschiedlich zu gewichten.
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) und COUNT(CASE … THEN 1 END) liefern das gleiche Ergebnis beim Zählen; wählen Sie den Stil, den Ihr Team bevorzugt.
Aufgabe
EinfachVerfügbare Tabellen und Spalten:
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type ist entweder 'sale' oder 'refund'. Gib für jede category Folgendes zurück:
categorynet_revenue: Summe der Verkaufsbeträge minus Summe der Rückerstattungsbeträge
Berechne net_revenue in einem einzigen SUM(CASE …) Ausdruck, wobei Rückerstattungen ihren Betrag als negative Zahl beisteuern. Sortiere nach net_revenue absteigend.
Spickzettel
Verwenden Sie SUM mit CASE, um Werte bedingt zu aggregieren – geben Sie 1/0 zum Zählen oder tatsächliche Werte für gewichtete Summen zurück:
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) und COUNT(CASE … THEN 1 END) ergeben das gleiche Zählergebnis.
Probier es selbst
SELECT category,
-- ein SUM(CASE ...), bei dem Rückerstattungen negativ zählen
FROM transactions
GROUP BY category
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.