Menu
Coddy logo textTech

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 users

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

challenge icon

Desafío

Fácil

Tablas 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:

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

SUM(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
quiz iconPonte a prueba

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