En las consultas SQL, la estructura CASE WHEN permite implementar lógica condicional compleja, siendo particularmente eficaz en MySQL. Esta herramienta facilita la toma de decisiones basada en valores de columnas o expresiones booleanas, similar a estructurasif-else en lenguajes de programación. A continuación, se detallan las dos formas principales de uso con ejemplos adaptados.
Casos de uso para la sentencia CASE
1. Forma simple: basada en el valor de una columna
Esta versión compara directamente el valor de una columna con valores específicos predefinidos.
Sintaxis:
CASE columna_expresion
WHEN valor1 THEN resultado1
WHEN valor2 THEN resultado2
...
[ELSE valor_predeterminado]
END
Si el valor coincide con alguna condición, se devuelve el resultado correspondiente; de lo contrario, se aplica el ELSE o se retorna NULL si no está definido.
Ejemplo:
SELECT
producto_id,
CASE categoria
WHEN 'electrónica' THEN 'Tecnología'
WHEN 'ropa' THEN 'Moda'
ELSE 'Otros'
END AS 'grupo_producto'
FROM inventario;
En este caso, se transforman los valores de la columna categoria en etiquetas descriptivas para el conjunto de datos.
2. Forma buscada: basada en condiciones
Esta variante evalúa expresiones booleanas arbitrarias, ofreciendo mayor flexibilidad para lógicas complejas.
Sintaxis:
CASE
WHEN condición1 THEN resultado1
WHEN condición2 THEN resultado2
...
[ELSE valor_predeterminado]
END
Ejemplo:
SELECT
cliente_id,
nombre,
CASE
WHEN saldo > 10000 THEN 'Premium'
WHEN saldo >= 5000 THEN 'Estándar'
ELSE 'Básico'
END AS 'tipo_cliente'
FROM cuentas;
Aquí, los clientes se clasifican según rangos de saldo, lo que permite una segmentación dinámica en consultas.
Consideraciones técnicas
- La sentencia CASE puede anidarse para construir condiciones multinivel.
- Los valores de resultado pueden ser de cualquier tipo de dato: numérico, cadena, fecha, etc.
- Después de THEN se pueden incluir expresinoes de cálculo, funciones o incluso subconsultas.
- Si se omite el cláusula ELSE, el valor resultante será NULL cuando ninguna condición se cumpla.
- CASE se puede emplear en SELECT, WHERE, ORDER BY, GROUP BY y otras cláusulas que admitan expresiones.
Aplicaciones comunes
Este recurso es útil para tareas como la transformación de datos en tiempo de ejecución, la categorización condicional en informes, el cálculo de métricas personalizadas (por ejemplo, descuentos progresivos o niveles de aprobación) y la implementación de lógicas de seguridad a nivel de fila.