Quel est mon classement ?
Échauffement · window-functions, filtering, joins
Étant données 3 tables, students(id, name), courses(id, name), grades(id, course_id, student_id, grade),
trouvez le rang de l'étudiant 'Ahmed Abbas' dans le cours 'Database Systems'. Le rang vaut 1 plus
le nombre d'étudiants de ce cours ayant une note strictement supérieure, donc des notes égales
partagent le même rang. Renvoyez la colonne (student_rank).
Colonnes attendues
student_rank
Indices
Indice 1 : quelles lignes comptent
Seules les notes de 'Database Systems' déterminent ce rang. SHOW INDEX FROM grades montre un index sur course_id : MySQL peut donc lire uniquement les notes de ce cours au lieu des 40 000.
Indice 2 : quand la fenêtre s'exécute
Les fonctions de fenêtrage sont calculées après le WHERE. RANK() OVER (ORDER BY grade DESC) sur les notes d'un seul cours donne le même rang, mais filtrer sur le nom de l'étudiant en dehors de la fenêtre oblige à classer d'abord tous les cours.