Saltar al contenido principal
eLearner.app
Módulo 4 · Lección 3 de 415/57 en el curso~10 min
Lecciones del módulo (3/4)

Lógica condicional: CASE WHEN

Todo lo que hemos visto hasta ahora extrae datos tal cual. Sin embargo, a menudo quieres para transformarlo: clasificar los salarios en niveles, marcar las nuevas contrataciones como "junior", traduce un código numérico en una etiqueta legible. estándar de SQL La herramienta para esto se llama CASE WHEN.

La sintaxis: un mini if/else

SQL
CASE
  WHEN condition_1 THEN value_1
  WHEN condition_2 THEN value_2
  ...
  ELSE default_value
END

Se lee exactamente como un if/else if/else en cualquier idioma: SQL evalúa las condiciones en orden y se detiene en la primera verdadera, devolviendo el CÓDIGOPH1 correspondiente. Si ninguno es verdadero, devuelve el valor ELSE. si tu omite ELSE y ninguna rama coincide, devuelve NULL.

SQL
-- Classify employees by salary tier:
SELECT first_name,
       last_name,
       salary,
       CASE
         WHEN salary >= 50000 THEN 'Senior'
         WHEN salary >= 35000 THEN 'Mid'
         ELSE                       'Junior'
       END AS tier
FROM   employees;

El CASE vive dentro del SELECT: produce una columna como cualquier función, y es perfectamente normal darle un alias con AS (aquí CÓDIGOPH3).

Dónde utilizar CASE

Tres lugares recurrentes:

  1. En SELECT para crear columnas derivadas (el ejemplo anterior).
  2. En ORDER BY para clasificación "personalizada":
    SQL
    ORDER BY CASE department_id WHEN 1 THEN 0 ELSE 1 END, last_name;
    -- Engineering first, then the rest, alphabetically by last name.
  3. Funciones agregadas internas para "contar condicionalmente":
    SQL
    SELECT
      COUNT(*) AS total,
      SUM(CASE WHEN salary >= 50000 THEN 1 ELSE 0 END) AS senior,
      SUM(CASE WHEN salary <  35000 THEN 1 ELSE 0 END) AS junior
    FROM employees;
    Este patrón, SUM(CASE WHEN … THEN 1 ELSE 0 END), es el más común "recuento condicional" utilizado en los paneles.

La forma "compacta"

También hay una variante más corta cuando comparas una sola expresión contra valores exactos:

SQL
CASE department_id
  WHEN 1 THEN 'Ingegneria'
  WHEN 2 THEN 'Vendite'
  ELSE       'Altro'
END

Es equivalente a CASE WHEN department_id = 1 THEN ... WHEN department_id = 2 THEN ... END, sólo que más compacto. Sólo funciona para igualdad exacta: si necesitas >= u otra comparación, tienes que volver a la versión extendida forma.

Pruébalo

Ejercicio#sql.m4.l3.e1
Intentos: 0Cargando...

Para cada empleado, muestre el nombre (first_name), el apellido (last_name) y una columna de 'nivel' que sea 'Alto' si el salario es de al menos 50000; de lo contrario, 'Estándar'. Tres columnas, una fila por empleado.

Cargando editor...
Mostrar pista

La condición es salario >= 50000. Recuerde cerrar el CASO con FIN y utilizar el alias 'nivel'.

Solución disponible después de 3 intentos

Ejercicio de revisión

Ejercicio#sql.m4.l3.e2
Intentos: 0Cargando...

Para cada departamento (department_id), cuente cuántos empleados tienen un salario alto (>= 50000) y cuántos uno estándar (< 50000) usando SUM(CASE...). Tres columnas: depart_id, alto, estándar. Ordenar por id_departamento (ÚLTIMOS NULLS).

Cargando editor...
Mostrar pista

El patrón SUM(CASE WHEN... THEN 1 ELSE 0 END) es el recuento condicional.

Solución disponible después de 3 intentos