Trouvez les 100 meilleurs étudiants

Échauffement · aggregation, joins, sorting

Étant données 3 tables, students(id, name), courses(id, name), grades(id, course_id, student_id, grade),

trouvez les 100 meilleurs étudiants selon leur moyenne, triés par moyenne décroissante. Si

plusieurs étudiants ont la même moyenne, triez-les par nom croissant. Renvoyez les colonnes

(name, average_grade).

Colonnes attendues

name, average_grade

Indices

Indice 1 : une ligne par étudiant

Joignez students à grades avec students.id = grades.student_id et regroupez avec GROUP BY students.id. AVG(grades.grade) donne alors une moyenne par étudiant. SHOW INDEX FROM grades montre lesquelles de ces colonnes de jointure sont indexées.

Indice 2 : le départage

ORDER BY average_grade DESC, name ASC, puis LIMIT 100. Sans la seconde clé de tri, les étudiants à moyenne égale reviennent dans un ordre arbitraire.