CASE WHEN traduce una regla en un valor
Un informe a menudo debe agrupar valores brutos en categorías comprensibles: pedido pequeño, mediano o grande; cliente activo o inactivo; objetivo alcanzado o no.
La expresión CASE evalúa las condiciones en orden y devuelve el valor asociado con la primera condición verdadera. Crea una columna de resultados sin modificar la tabla fuente.
La sintaxis completa de CASE WHEN
Cada rama comienza con WHEN, describe una condición y luego informa el resultado después de THEN. ELSE cubre todos los casos restantes y END cierra la expresión.
Un alias colocado después de END le da un nombre utilizable a la nueva columna.
- CASE comienza la expresión.
- CUANDO define una condición.
- ENTONCES proporciona el resultado correspondiente.
- ELSE procesa las otras líneas.
- FIN cierra la expresión.
SELECT
id_commande,
montant,
CASE
WHEN montant >= 150 THEN 'Alta'
WHEN montant >= 50 THEN 'Media'
ELSE 'Bajo'
END AS tranche_montant
FROM commandes
ORDER BY id_commande ASC;El orden de las condiciones determina el resultado.
CASE se detiene en la primera condición verdadera. Por lo tanto, en este ejemplo los umbrales deben escribirse desde el más restrictivo hasta el más amplio.
Si montant >= 50 apareciera antes de montant >= 150, un pedido de 200 satisfaría inmediatamente la primera rama y se clasificaría como "Medio".
CASE
WHEN montant >= 150 THEN 'Alta'
WHEN montant >= 50 THEN 'Media'
ELSE 'Bajo'
END¿Qué pasa sin MÁS?
Cuando ninguna de las condiciones es verdadera y no hay ningún ELSE presente, CASE devuelve NULL. Este comportamiento puede ser voluntario, pero debe anticiparse en filtros y agregaciones posteriores.
Agregar ELSE a menudo hace que la regla sea más fácil de verificar. Una etiqueta como “Sin clasificar” también revela valores que no entran en ninguna categoría esperada.
SELECT
id_commande,
CASE
WHEN statut = 'Pagado' THEN 'Completada'
WHEN statut = 'Pendiente' THEN 'Por tratar'
ELSE 'Por verificar'
END AS suivi
FROM commandes;Construyendo un KPI con agregación condicional
CASE puede devolver 1 cuando la condición es verdadera y 0 en caso contrario. Luego, SUM agrega estos indicadores para contar las filas que cumplen con la regla.
Esta técnica permite calcular varios KPI en una sola línea y un único alcance, sin multiplicar consultas.
- COUNT(*) da el volumen total.
- Cada CASO produce un indicador 0 o 1.
- SUM transforma estos indicadores en contadores.
SELECT
COUNT(*) AS nombre_commandes,
SUM(CASE WHEN statut = 'Pagado' THEN 1 ELSE 0 END) AS commandes_payees,
SUM(CASE WHEN statut = 'Pendiente' THEN 1 ELSE 0 END) AS commandes_en_attente
FROM commandes;Agrupar resultados por segmento calculado
Una expresión CASE puede servir como dimensión en un informe. Agrupándolo se obtiene una línea por porción acompañada de un volumen, un total o un promedio.
Dependiendo del motor SQL, el alias no siempre se acepta en GROUP BY. Repetir la expresión sigue siendo una solución explícita y portátil.
SELECT
CASE
WHEN montant >= 150 THEN 'Alta'
WHEN montant >= 50 THEN 'Media'
ELSE 'Bajo'
END AS tranche_montant,
COUNT(*) AS nombre_commandes,
SUM(montant) AS chiffre_affaires
FROM commandes
GROUP BY
CASE
WHEN montant >= 150 THEN 'Alta'
WHEN montant >= 50 THEN 'Media'
ELSE 'Bajo'
END
ORDER BY chiffre_affaires DESC;CASE no siempre reemplaza a WHERE
Utiliza WHERE cuando lo necesario sea simplemente eliminar filas. CASE es más adecuado cuando es necesario generar un valor diferente según la línea o calcular varios indicadores condicionales.
Una expresión CASE innecesariamente anidada dificulta la relectura de la regla. Prefiere varias ramas simples y nombres de categorías inequívocos.
- WHERE selecciona un perímetro.
- CASE clasifica o transforma un valor.
- CASE en SUM o COUNT construye una bandera condicional.
- Una tabla de referencia resulta preferible cuando las reglas son numerosas y cambian con frecuencia.
Comprueba una regla CASE antes de publicarla
Enumere las categorías esperadas, prueba cada umbral exacto y comprueba los valores de NULL. Luego compara el total de segmentos con la cantidad de registros devueltos por el alcance.
Los errores más comunes son condiciones en el orden incorrecto, falta un ELSE, resultados de tipos incompatibles o umbrales que dejan un intervalo sin cubrir.
Pon esta guía en práctica.
Abre el ejercicio relacionado, ejecuta tu consulta y compara el resultado esperado.
