SQL analítico · lógica condicional

CASE

Construye un valor diferente según la primera condición que se cumpla dentro de una consulta.

Lectura: 5–7 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué devuelve CASE

CASE es una expresión condicional: produce un valor que puedes mostrar, ordenar, agrupar o utilizar en otro cálculo. No modifica los datos por sí sola.

Las condiciones se evalúan de arriba abajo. Cuando una condición resulta verdadera, se devuelve su valor y las ramas posteriores dejan de ser candidatas para esa fila.

Dos formas habituales

CASE buscado
CASE
  WHEN condicion_1 THEN resultado_1
  WHEN condicion_2 THEN resultado_2
  ELSE resultado_alternativo
END

La forma buscada permite escribir condiciones distintas. La forma simple compara una expresión con varios valores: CASE estado WHEN 'pagado' THEN ....

Ejemplo guiado: clasificar existencias

SQL
SELECT nombre,
       stock,
       CASE
         WHEN stock = 0 THEN 'agotado'
         WHEN stock < 10 THEN 'pocas unidades'
         ELSE 'disponible'
       END AS disponibilidad
FROM productos
ORDER BY stock, nombre
LIMIT 6;
Resultado comprobado con la base educativa
nombrestockdisponibilidad
Altavoz0agotado
Portátil Pro0agotado
Monitor 272pocas unidades
Monitor 244pocas unidades
Teclado7pocas unidades
Disco SSD9pocas unidades

La condición stock = 0 debe aparecer antes que stock < 10. De lo contrario, los productos agotados entrarían en la categoría más amplia.

Sin ELSE, CASE devuelve NULL cuando ninguna rama coincide. Esa puede ser la intención, pero conviene decidirlo expresamente.

Errores frecuentes

Ordenar las condiciones de general a específica

Orden problemático
CASE
  WHEN stock < 10 THEN 'pocas unidades'
  WHEN stock = 0 THEN 'agotado'
END

La segunda rama nunca clasifica un cero porque la primera ya lo acepta. También evita mezclar resultados incompatibles sin revisar cómo el motor decide el tipo final de la expresión.

Comprueba lo aprendido

Básica · clasificación

Clasifica el importe de los pedidos

Muestra id, total y una columna tramo: 'alto' para totales de 200 o más, 'medio' para totales de 100 o más y 'bajo' para el resto.

Compatibilidad entre motores

La expresión CASE está ampliamente disponible. No la confundas con sentencias de control procedural llamadas también CASE en algunos lenguajes almacenados. En una consulta, cada rama debe producir valores que el motor pueda combinar en un tipo de resultado compatible.

Qué debes recordar

  • CASE devuelve un valor; no es una tabla ni un filtro por sí solo.
  • La primera condición verdadera determina el resultado.
  • Ordena de la condición más específica a la más general.
  • Sin ELSE, la ausencia de coincidencia produce NULL.

Una aplicación práctica de esta expresión es usar CASE dentro de ORDER BY para definir prioridades que no siguen un orden alfabético o numérico natural.

Conceptos relacionados

Fuentes técnicas consultadas