Al terminar, podrás
- Crear una columna calculada mediante condiciones ordenadas.
- Detectar cuándo una condición general oculta otra más específica.
- Decidir qué debe ocurrir cuando ninguna condición se cumple.
Recupera lo aprendido: ¿Qué ocurre en WHERE cuando una condición contiene NULL y su resultado es desconocido?
La idea clave
CASE evalúa los WHEN de arriba abajo y devuelve el resultado de la primera condición verdadera. El orden forma parte de la lógica.
Diseña los intervalos antes de escribir: empieza por el caso más restrictivo y comprueba los valores frontera. ELSE cubre todo lo que no entró antes.
La sintaxis básica
CASE
WHEN condicion_1 THEN resultado_1
WHEN condicion_2 THEN resultado_2
ELSE resultado_restante
END AS aliasEjemplo paso a paso
Clasificaremos los productos como precio alto desde 200, medio desde 50 y bajo en los demás casos.
SELECT nombre, precio,
CASE
WHEN precio >= 200 THEN 'alto'
WHEN precio >= 50 THEN 'medio'
ELSE 'bajo'
END AS tramo
FROM productos
ORDER BY precio DESC, id;| nombre | precio | tramo |
|---|---|---|
| Portátil Pro | 999,00 | alto |
| Monitor 27 | 249,00 | alto |
| Monitor 24 | 179,00 | medio |
| Disco SSD | 89,00 | medio |
| Auriculares | 69,90 | medio |
| Altavoz | 54,00 | medio |
| Teclado | 49,50 | bajo |
| Ratón | 24,90 | bajo |
| Cable USB-C | 12,00 | bajo |
Cómo funciona
- Los precios de 200 o más terminan en
alto. - La segunda condición solo recibe precios menores de 200; desde 50 son
medio. ELSEcubre los precios restantes sin repetir condiciones.
Un error habitual
Colocar primero la condición más amplia
CASE
WHEN precio >= 50 THEN 'medio'
WHEN precio >= 200 THEN 'alto'
ENDTodo precio de 200 o más también cumple precio >= 50, así que nunca alcanza el segundo WHEN. Reordena las condiciones y añade ELSE si no quieres producir NULL.
Practica con datos
Laboratorio SQL
Resuelve la consulta
Escribe una consulta que devuelva nombre y una columna disponibilidad: 'agotado' cuando stock sea 0 y 'disponible' en los demás casos.
Resultado esperado: 9 filas con nombre, disponibilidad. El orden de las filas no importa.
Ver tablas y datos
Cargando la estructura del ejercicio…
Empieza por CASE WHEN stock = 0.
Añade THEN y ELSE.
Cierra con END AS disponibilidad.
Solución
SELECT nombre, CASE WHEN stock = 0 THEN 'agotado' ELSE 'disponible' END AS disponibilidad FROM productos;La expresión produce una etiqueta por fila sin modificar el stock.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Fuentes técnicas consultadas
Las fuentes confirman que la primera condición verdadera determina el resultado y que ELSE es opcional.
Comprueba si puedes explicarlo
Si ninguna condición WHEN es verdadera y no escribes ELSE, ¿qué devuelve CASE?
Ver respuesta razonada
Devuelve NULL. Si una condición es desconocida, continúa con la siguiente. Para categorías completas, decide explícitamente qué debe representar ELSE.
Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.
Qué debes recordar
- CASE devuelve el resultado del primer WHEN verdadero.
- Ordena las condiciones de la más específica a la más general.
- Sin ELSE, las filas no cubiertas producen NULL.
A continuación: Continúa con Transforma textos y fechas.
Si ya dominas cómo CASE produce un valor, puedes aplicarlo a prioridades personalizadas dentro de ORDER BY.