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 incluso más flexible. El CASE puede devolver 1 para las filas que coincidan y 0 para todo lo demás, o puede devolver cualquier valor numérico para ponderar las filas de manera 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 para el conteo; elige el estilo que prefiera tu equipo.
Desafío
FácilTablas y columnas disponibles:
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type es 'sale' o 'refund'. Para cada category devuelve:
categorynet_revenue: suma de los importes de venta menos la suma de los importes de reembolso
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 de forma descendente.
Hoja de referencia
Usa SUM con CASE para agregar valores de forma condicional: devuelve 1/0 para contar, o valores reales para sumas ponderadas:
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) producen el mismo resultado de conteo.
Pruébalo tú mismo
SELECT category,
-- un SUM(CASE ...) donde los reembolsos cuentan en 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
3Agregación condicional
COUNT con CASESUM con CASEPivotar filas a columnasResumen - Fuentes de tráfico