¿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.