Compartir en Twitter
Go to Homepage

CÓMO USAR LA SENTENCIA CASE EN SQL

October 17, 2025

Introducción a la Sentencia CASE en SQL

La sentencia CASE en SQL es una herramienta poderosa para realizar transformaciones condicionales en los datos. Similar a las estructuras de control como “if” o “switch” en otros lenguajes de programación, permite asignar valores a una columna basándose en condiciones específicas. En el contexto del análisis de datos, esta funcionalidad es crucial para clasificar, transformar y resumir información de manera eficiente. Este tutorial explora la sintaxis de la sentencia CASE, su aplicación práctica y ejemplos detallados para comprender su utilidad en la gestión de datos.

La sentencia CASE es especialmente útil en escenarios donde se necesita categorizar datos dinámicamente, como asignar calificaciones basadas en puntajes, clasificar resultados o resumir información en reportes. A continuación, se detalla su sintaxis y se presentan ejemplos prácticos que ilustran cómo aplicarla en consultas SQL para resolver problemas comunes en el análisis de datos.

Sintaxis de la Sentencia CASE

La sintaxis de la sentencia CASE es intuitiva, aunque incluye varios componentes. Comienza con la palabra clave CASE y termina con END. Dentro de este bloque, se especifican condiciones usando WHEN seguido de la condición a evaluar y THEN para indicar el valor que se asignará si la condición se cumple. Es posible encadenar múltiples condiciones WHEN/THEN. Además, se puede incluir una cláusula ELSE para definir un valor predeterminado si ninguna condición se satisface.

CASE
   WHEN condicion1 THEN valor1
   WHEN condicion2 THEN valor2
   ...
   ELSE valor_predeterminado
END

Esta estructura permite flexibilidad para manejar diferentes escenarios. Por ejemplo, en una base de datos de estudiantes, se puede usar para asignar calificaciones basadas en puntajes numéricos. La capacidad de combinar múltiples condiciones hace que la sentencia CASE sea ideal para transformaciones condicionales de datos en análisis complejos.

Ejemplo Básico: Asignación de Calificaciones

Para ilustrar el uso de la sentencia CASE, consideremos una tabla de estudiantes con sus puntajes en un examen. El objetivo es asignar una calificación alfabética (A, B, C, etc.) según el puntaje obtenido. Supongamos que la tabla estudiantes_calificaciones contiene las columnas id, nombre y puntaje, con datos como los siguientes:

id nombre puntaje
1 Simisola 60
2 Ivan 80
3 Metodija 52
4 Callum 98
5 Leia 84

Para asignar calificaciones, definimos rangos de puntajes. Por ejemplo, un puntaje de 94 o más corresponde a una “A”, de 90 a 93 a una “A-”, y así sucesivamente. La consulta SQL sería:

SELECT *,
  CASE
    WHEN puntaje >= 94 THEN 'A'
    WHEN puntaje >= 90 THEN 'A-'
    WHEN puntaje >= 87 THEN 'B+'
    WHEN puntaje >= 83 THEN 'B'
    WHEN puntaje >= 80 THEN 'B-'
    WHEN puntaje >= 77 THEN 'C+'
    WHEN puntaje >= 73 THEN 'C'
    WHEN puntaje >= 70 THEN 'C-'
    WHEN puntaje >= 67 THEN 'D+'
    WHEN puntaje >= 60 THEN 'D'
    ELSE 'F'
  END AS calificacion
FROM estudiantes_calificaciones;

El resultado agrega una columna calificacion con valores basados en el puntaje. Por ejemplo:

id nombre puntaje calificacion
1 Simisola 60 D
2 Ivan 80 B-
3 Metodija 52 F
4 Callum 98 A
5 Leia 84 B

Este ejemplo demuestra cómo la sentencia CASE transforma datos numéricos en categorías alfabéticas, facilitando el análisis y la presentación de resultados.

Ordenamiento de Datos con CASE

La sentencia CASE puede combinarse con otras cláusulas SQL, como ORDER BY, para personalizar la presentación de los datos. Supongamos que queremos ordenar la tabla anterior por puntaje, de mayor a menor, mostrando solo el nombre y la calificación. La consulta sería:

SELECT nombre,
  CASE
    WHEN puntaje >= 94 THEN 'A'
    WHEN puntaje >= 90 THEN 'A-'
    WHEN puntaje >= 87 THEN 'B+'
    WHEN puntaje >= 83 THEN 'B'
    WHEN puntaje >= 80 THEN 'B-'
    WHEN puntaje >= 77 THEN 'C+'
    WHEN puntaje >= 73 THEN 'C'
    WHEN puntaje >= 70 THEN 'C-'
    WHEN puntaje >= 67 THEN 'D+'
    WHEN puntaje >= 60 THEN 'D'
    ELSE 'F'
  END AS calificacion
FROM estudiantes_calificaciones
ORDER BY puntaje DESC;

El resultado ordena los estudiantes por puntaje descendente:

nombre calificacion
Callum A
Leia B
Ivan B-
Simisola D
Metodija F

El uso de ORDER BY puntaje DESC asegura que los estudiantes con los puntajes más altos aparezcan primero. Ordenar por la columna calificacion no sería adecuado, ya que el orden alfabético (A, A-, B, etc.) no refleja el valor numérico de las calificaciones. Este enfoque es útil para generar reportes ordenados en análisis de rendimiento estudiantil.

Agrupación y Conteo de Calificaciones

La sentencia CASE también es valiosa para resumir datos mediante la cláusula GROUP BY. Por ejemplo, podemos contar cuántos estudiantes recibieron cada calificación. La consulta sería:

SELECT
  CASE
    WHEN puntaje >= 94 THEN 'A'
    WHEN puntaje >= 90 THEN 'A-'
    WHEN puntaje >= 87 THEN 'B+'
    WHEN puntaje >= 83 THEN 'B'
    WHEN puntaje >= 80 THEN 'B-'
    WHEN puntaje >= 77 THEN 'C+'
    WHEN puntaje >= 73 THEN 'C'
    WHEN puntaje >= 70 THEN 'C-'
    WHEN puntaje >= 67 THEN 'D+'
    WHEN puntaje >= 60 THEN 'D'
    ELSE 'F'
  END AS calificacion,
  COUNT(*) AS numero_estudiantes
FROM estudiantes_calificaciones
GROUP BY calificacion
ORDER BY puntaje DESC;

El resultado muestra la distribución de calificaciones:

calificacion numero_estudiantes
A 1
B 1
B- 1
D 1
F 1

Este análisis permite identificar patrones, como la cantidad de estudiantes en cada categoría de calificación. La combinación de GROUP BY y COUNT con la sentencia CASE es ideal para resúmenes estadísticos de datos.

Análisis de Aprobación y Reprobación

Otro caso de uso común es clasificar resultados en categorías binarias, como “aprobado” o “reprobado”. Supongamos que un puntaje de 60 o más indica que el estudiante aprobó el examen. La consulta sería:

SELECT
  CASE
    WHEN puntaje >= 60 THEN 'aprobado'
    ELSE 'reprobado'
  END AS resultado,
  COUNT(*) AS numero_estudiantes
FROM estudiantes_calificaciones
GROUP BY resultado
ORDER BY resultado DESC;

El resultado muestra:

resultado numero_estudiantes
aprobado 4
reprobado 1

Esta consulta proporciona una visión clara del rendimiento general de la clase, destacando cuántos estudiantes aprobaron frente a los que reprobaron. Es un ejemplo de cómo la sentencia CASE puede simplificar el análisis de resultados binarios en bases de datos.

Aplicaciones Avanzadas de la Sentencia CASE

La sentencia CASE no se limita a clasificaciones simples. Puede usarse en combinación con otras funciones SQL para realizar transformaciones más complejas. Por ejemplo, se puede integrar con funciones de agregación, subconsultas o incluso uniones (JOIN) para enriquecer el análisis de datos. A continuación, se exploran algunas aplicaciones avanzadas.

Combinación con Funciones de Agregación

La sentencia CASE puede usarse dentro de funciones de agregación como SUM o AVG para realizar cálculos condicionales. Por ejemplo, si queremos calcular el promedio de puntajes solo para los estudiantes que aprobaron (puntaje ≥ 60), la consulta sería:

SELECT
  AVG(CASE
        WHEN puntaje >= 60 THEN puntaje
        ELSE NULL
      END) AS promedio_aprobados
FROM estudiantes_calificaciones;

En este caso, los puntajes de los estudiantes reprobados se convierten en NULL y no se incluyen en el cálculo del promedio. Esto es útil para análisis condicional de métricas en reportes financieros o académicos.

Uso en Subconsultas

La sentencia CASE también puede aparecer en subconsultas para filtrar o transformar datos antes de procesarlos. Por ejemplo, si queremos listar solo a los estudiantes con calificaciones A o A-, podríamos usar:

SELECT nombre, calificacion
FROM (
  SELECT nombre,
    CASE
      WHEN puntaje >= 94 THEN 'A'
      WHEN puntaje >= 90 THEN 'A-'
      WHEN puntaje >= 87 THEN 'B+'
      WHEN puntaje >= 83 THEN 'B'
      WHEN puntaje >= 80 THEN 'B-'
      WHEN puntaje >= 77 THEN 'C+'
      WHEN puntaje >= 73 THEN 'C'
      WHEN puntaje >= 70 THEN 'C-'
      WHEN puntaje >= 67 THEN 'D+'
      WHEN puntaje >= 60 THEN 'D'
      ELSE 'F'
    END AS calificacion
  FROM estudiantes_calificaciones
) AS subconsulta
WHERE calificacion IN ('A', 'A-');

El resultado mostraría solo a los estudiantes con las calificaciones más altas, como:

nombre calificacion
Callum A

Este enfoque es útil para filtrar datos en análisis selectivo de resultados.

Personalización de Reportes

En entornos empresariales, la sentencia CASE puede personalizar reportes combinándola con cláusulas como JOIN. Por ejemplo, si tenemos una tabla adicional con información de cursos y queremos clasificar a los estudiantes según el curso y su puntaje, podríamos usar:

SELECT e.nombre, c.nombre_curso,
  CASE
    WHEN e.puntaje >= 94 THEN 'A'
    WHEN e.puntaje >= 90 THEN 'A-'
    ELSE 'Otra'
  END AS calificacion
FROM estudiantes_calificaciones e
JOIN cursos c ON e.id_curso = c.id_curso;

Este tipo de consulta es común en sistemas de gestión educativa o empresarial, donde los datos de múltiples tablas deben consolidarse y clasificarse.

Buenas Prácticas para Usar CASE

Para maximizar la efectividad de la sentencia CASE, considera las siguientes recomendaciones:

  • Orden de las Condiciones: Las condiciones en la sentencia CASE se evalúan en orden. Coloca las condiciones más restrictivas primero para optimizar el rendimiento.

  • Legibilidad: Usa sangrías y alineación consistente en el código SQL para facilitar la lectura y el mantenimiento.

  • Evita Condiciones Complejas: Si las condiciones son muy complejas, considera usar subconsultas o funciones personalizadas para mejorar la claridad.

  • Pruebas Incrementales: Prueba la sentencia CASE con un subconjunto de datos antes de aplicarla a grandes bases de datos para evitar errores.

Por ejemplo, una versión optimizada de la consulta de calificaciones podría ser:

SELECT nombre, puntaje,
  CASE
    WHEN puntaje >= 94 THEN 'A'
    WHEN puntaje >= 90 THEN 'A-'
    WHEN puntaje >= 87 THEN 'B+'
    ELSE 'Otra'
  END AS calificacion
FROM estudiantes_calificaciones
WHERE puntaje >= 60
ORDER BY puntaje DESC;

Esta consulta filtra primero a los estudiantes con puntaje mayor o igual a 60, reduciendo el número de filas procesadas.

Conclusiones

La sentencia CASE en SQL es una herramienta versátil para transformar y analizar datos de manera condicional. Su capacidad para asignar valores basados en condiciones la hace ideal para clasificar datos, generar reportes y realizar análisis estadísticos. Desde asignar calificaciones hasta resumir resultados en categorías, la sentencia CASE simplifica tareas complejas en la gestión de bases de datos. Al combinarla con cláusulas como ORDER BY, GROUP BY o funciones de agregación, los desarrolladores pueden crear consultas robustas que satisfacen necesidades específicas en el análisis de datos. Dominar esta sentencia es esencial para cualquier profesional que trabaje con SQL en entornos de programación y análisis de datos.