Crear agregaciones condicionales
Objetivos
Al terminar podrás producir varias métricas por grupo con reglas CASE distintas.
Concepto
CASE puede formar parte de una agregación. SUM(CASE WHEN condición THEN 1 ELSE 0 END) cuenta filas que pasan la condición. También puedes sumar una columna solo cuando se cumple una regla.
Los umbrales deben tener una definición explícita. Aquí cinco unidades monetarias son un corte de práctica; no es una categoría oficial ni una regla financiera de Sakila.
Ejemplo
SELECT
s.store_id AS staff_primary_store_id,
COUNT(*) AS payment_count,
SUM(CASE WHEN p.amount >= 5.00 THEN 1 ELSE 0 END) AS payments_at_least_5,
SUM(CASE WHEN p.amount < 5.00 THEN 1 ELSE 0 END) AS payments_below_5,
ROUND(SUM(p.amount), 2) AS total_amount
FROM payment AS p
INNER JOIN staff AS s
ON s.staff_id = p.staff_id
GROUP BY s.store_id
ORDER BY s.store_id;Las dos categorías cubren todas las filas porque cada importe es menor que cinco o mayor o igual que cinco. staff_primary_store_id describe la tienda asignada al personal, no el lugar físico del pago.
Práctica guiada
- Añade un contador para pagos exactamente iguales a cinco.
- Cambia el corte a diez y actualiza los alias para que indiquen el nuevo criterio.
- Comprueba que los dos contadores complementarios suman
payment_count.
Reto
Agrupa por staff_id y calcula el número de pagos menores de cinco y el importe acumulado de esos pagos. Conserva una fila por empleado y explica el umbral que elegiste.
Quiz
¿Qué produce SUM(CASE WHEN amount >= 5 THEN 1 ELSE 0 END)?
- A. El número de filas que cumplen la condición.
- B. El importe total de todos los pagos.
- C. Una tabla permanente con los pagos filtrados.
Respuesta: A. CASE devuelve uno o cero por fila y SUM cuenta los unos.
Comprobación
Ya puedes crear varios indicadores dentro de un mismo resumen. La próxima lección usa COUNT(DISTINCT ...) y reconcilia métricas antes y después de un JOIN.