La expresión CASE
CASE es el "if/else" de SQL: evalúa condiciones en orden y devuelve el
valor de la primera que se cumple. Es una expresión, así que puede ir en
cualquier sitio donde quepa un valor: en el SELECT, en el ORDER BY, etc.
SELECT
nombre,
precio,
CASE
WHEN precio < 50 THEN 'barato'
WHEN precio < 200 THEN 'medio'
ELSE 'caro'
END AS rango
FROM productos;
- Cada
WHEN ... THEN ...es una condición y su resultado. - Se evalúan de arriba abajo: gana la primera que sea verdadera.
ELSEes el valor por defecto si ninguna condición se cumple. Si lo omites y no casa ninguna rama, el resultado esNULL.ENDcierra la expresión. ConASle pones nombre a la columna calculada.
Forma abreviada
Cuando comparas una misma columna contra valores concretos, hay una forma más corta:
SELECT nombre,
CASE categoria
WHEN 'perifericos' THEN 'accesorio'
WHEN 'pantallas' THEN 'visualizacion'
ELSE 'otro'
END AS tipo
FROM productos;
Cuidado con el orden de las condiciones. Como gana la primera que se cumple, las ramas más específicas deben ir antes que las más generales.
Ejemplos
Clasificar precios en rangos legibles
SELECT nombre, precio,
CASE
WHEN precio < 50 THEN 'barato'
WHEN precio < 200 THEN 'medio'
ELSE 'caro'
END AS rango
FROM productos
ORDER BY precio;