¿En qué puesto quedé?
Calentamiento · window-functions, filtering, joins
Dadas 3 tablas, students(id, name), courses(id, name), grades(id, course_id, student_id, grade),
averigua el puesto del estudiante 'Ahmed Abbas' en el curso 'Database Systems'. El puesto es 1 más
el número de estudiantes de ese curso con una nota estrictamente mayor, así que las notas iguales
comparten puesto. Devuelve la columna (student_rank).
Columnas esperadas
student_rank
Pistas
Pista 1: qué filas importan
Solo las notas de 'Database Systems' deciden este puesto. SHOW INDEX FROM grades muestra un índice sobre course_id, así que MySQL puede leer solo las notas de ese curso en lugar de las 40.000.
Pista 2: cuándo se ejecuta la ventana
Las funciones de ventana se calculan después del WHERE. RANK() OVER (ORDER BY grade DESC) sobre las notas de un solo curso da el mismo puesto, pero filtrar por el nombre del estudiante fuera de la ventana obliga a clasificar primero todos los cursos.