Concepto
CASE crea una columna nueva a partir de reglas: "si la nota es 6 o más, 'destacado'; si es 4 o más, 'aprobado'; si no, 'reprobado'". Es el if de SQL, y sirve para segmentar sin tocar los datos.
CASE
WHEN condición_1 THEN 'valor_1'
WHEN condición_2 THEN 'valor_2'
ELSE 'valor_por_defecto'
END AS nombre_columnaSe revisa en orden. SQL prueba cada WHEN de arriba hacia abajo y usa el primero que se cumple; los siguientes ya no se miran. Por eso la segunda condición puede ser más simple: ya sabe que la primera no se cumplió.
SELECT titulo, horas,
CASE
WHEN horas < 20 THEN 'corto'
WHEN horas <= 30 THEN 'medio'
ELSE 'largo'
END AS duracion
FROM cursos;ELSE cubre el resto. Todo lo que no cumplió ningún WHEN toma el valor del ELSE. Sin ELSE, esas filas quedan en NULL.
Es una columna más. Lleva alias, se puede ordenar y se puede agrupar: GROUP BY sobre una columna CASE cuenta cuántos hay en cada segmento.
Ordenar con empates. Si ordenas por una columna con valores repetidos, la base no garantiza en qué orden quedan las filas empatadas. Agrega una segunda columna al ORDER BY para desempatar.
> tarea SQL
Clasifica a cada estudiante por edad en grupo_edad: 'junior' si tiene menos de 21 años, 'intermedio' si tiene entre 21 y 23 (ambos incluidos) y 'senior' si tiene más de 23. Muestra nombre, edad y grupo_edad, ordenados por edad y, si empatan, por nombre.
Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.