> lección 18/18 · 25 min

Proyecto final: segmentar estudiantes por rendimiento

Concepto

Este proyecto junta lo principal del curso en una sola consulta: resumir, unir, clasificar y ordenar. La coordinación quiere saber cómo va cada estudiante para decidir a quién reconocer y a quién apoyar.

Sintaxis
WITH resumen AS (... GROUP BY ...)
SELECT ..., CASE ... END AS segmento
FROM resumen
JOIN ...
ORDER BY ...;

El plan antes que la consulta. Una consulta larga sale mejor si la piensas en pasos:

  1. Resumir: por cada estudiante, cuántas inscripciones tiene y su nota promedio. Es un GROUP BY sobre inscripciones.
  2. Nombrar: el resumen tiene ids; un JOIN con estudiantes trae el nombre.
  3. Clasificar: un CASE convierte el promedio en un segmento.
  4. Ordenar: de mayor a menor promedio, con un desempate.

Un CTE para el paso 1. Deja el resumen con nombre arriba, y la consulta principal se lee como el resto del plan.

Probar cada paso. Ejecuta el WITH solo con un SELECT * FROM resumen antes de escribir lo demás. Si el resumen está mal, todo lo que viene después también.

Los casos borde del CASE. Piensa qué pasa con un estudiante cuya única inscripción todavía no tiene nota: su promedio es NULL, y NULL >= 6.5 no es verdadero. Si no lo consideras, el ELSE lo clasificaría como "en riesgo" sin tener ninguna nota. En un CASE, revisa primero el caso especial.

> tarea SQL

Con un CTE, calcula por estudiante su cantidad de inscripciones (cantidad) y su nota promedio redondeada a 2 decimales (promedio). Muestra nombre, cantidad, promedio y segmento: 'sin notas' si todavía no tiene notas, 'alto rendimiento' si el promedio es 6.5 o más, 'regular' si es 5.5 o más y 'en riesgo' en el resto. Ordena del promedio más alto al más bajo y, si empatan, por nombre.

Tablas disponibles
  • cursos: id, titulo, nivel, horas
  • estudiantes: id, nombre, correo, edad, ciudad
  • inscripciones: id, estudiante_id, curso_id, nota, estado

Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.

Aprueba las tareas de esta lección para ver el cierre.