SUM con CASE
Parte de la sección Más allá de lo básico del Journey de SQL de Coddy. Lección 13 de 27.
La misma idea funciona con SUM: y es aún más flexible. CASE puede devolver 1 para las filas coincidentes y 0 para todo lo demás, o puede devolver cualquier valor numérico para ponderar las filas de forma diferente.
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) y COUNT(CASE … THEN 1 END) dan el mismo resultado al contar; elige el estilo que prefiera tu equipo.
Desafío
FácilTablas y columnas disponibles:
transactions:id,category,type,amount
type es 'sale' o 'refund'. Para cada category, devuelve:
categorynet_revenue: suma de los importes de las ventas menos la suma de los importes de los reembolsos
Calcula net_revenue en una única expresión SUM(CASE …), donde los reembolsos contribuyen con su importe como un número negativo. Ordena por net_revenue en orden descendente.
Pruébalo tú mismo
SELECT category,
-- un SUM(CASE ...) donde los reembolsos cuentan negativo
FROM transactions
GROUP BY category
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Más allá de lo básico
2Funciones de cadenas
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE y TRIMConcatenar con ||Repaso - Facturas3Agregación condicional
COUNT con CASESUM con CASEConvertir filas en columnasRepaso: fuentes de tráficoPractica por tu cuenta: Playground de SQL