面试遇到后,回来查,发现网上的答案有点问题,自己又想了一下,对网上的sql做了一点点修改,希望各位能用上!!!
Class表
classid classname
1 高三(一)班
2 高三(二)班
3 高三(三)班
Student表
studentid studentName classid
1 张三 2
2 李四 1
3 王五 1
4 赵六 3
5 钱七 2
6 孙九 3
score表
scoreid course studentid score
1 数学 2 99
2 数学 3 60
3 数学 4 80
4 语文 5 79
5 语文 6 58
6 语文 1 66
7 英语 6 76
8 英语 4 87
9 英语 3 100
10 英语 2 69
SELECT * FROM
#按班级排序,然后再按科目排序,最后是按分数降序排序取得各班各科最高分都排第一个的表
(SELECT * FROM
#连接所有表
(SELECT s.studentName,c.classname,r.course,r.score FROM student s INNER JOIN class c ON s.classid=c.classid INNER JOIN score r ON r.studentid=s.studentid ) a
ORDER BY
classname,course,score DESC) sortchart
#GROUP BY默认是根据表中每组第一个取值
GROUP BY classname,course