我无法将结果显示正确,我想要一份所有学生的列表,其得分最高。我的表设置为记录每次参加测试的尝试,因此每个学生都有多个分数。
这是我的代码:
SELECT o1.student_id, o1.max_score, o2.course_id max_score
FROM (
SELECT student_id, MAX( test_result ) max_score
FROM test_scores
WHERE test_scores.course_id = $course_id
GROUP BY score DESC
)o1
JOIN test_scores o2 ON ( o2.score = o1.max_score AND o2.student_id = o1.student_id )
GROUP BY o1.max_score DESC
我得到了这些结果:
course_id max_score student_id_of_max_score
1 100 23
1 90 17
1 80 16
1 60 11
1 40 18
1 39 17*
1 33 1
1 0 11*
我应该补充一点,问题是存在重复学生ID的行 - 标有星号。我只想要每门课程得分最高。
答案 0 :(得分:1)
任何原因
SELECT course_id, student_id, MAX(score)
FROM test_scores
GROUP BY course_id, student_id
还不够吗?