Menu
Coddy logo textTech

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 users

SUM(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.

challenge icon

Aufgabe

Einfach

Verfü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:

  • category
  • net_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 users

SUM(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
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