mysql三表查询分组后取每组最大值,mysql面试题。

一,这是一道面试题,有如下三张表,查询每班分数最高的学生。
1)学生信息表(学生)
mysql三表查询分组后取每组最大值,mysql面试题。
文章图片
学生
(2)班级信息表(类)
mysql三表查询分组后取每组最大值,mysql面试题。
文章图片

(3)成绩信息表(得分)
mysql三表查询分组后取每组最大值,mysql面试题。
文章图片
得分了

在网上找了很多帖子,发现查询出来的结果并非是分组后的最大值,而是分组后的第一条数据。感觉MAX()函数没有发挥作用。
尝试了很久终于找到了解决办法。希望可以帮到各位,还有DBA大哥不要喷小弟,小弟的mysql自学的!
mysql三表查询分组后取每组最大值,mysql面试题。
文章图片
结果
错误语句查询的结果:如下图!
mysql三表查询分组后取每组最大值,mysql面试题。
文章图片


正确语句:(先把成绩表按照stuid分组,并用score降序排列。这样就能保证MAX()函数取得是分组后的最大值。)
SELECT student.*,class.*,score.*,MAX(score)
FROM(SELECT stuid,MAX(score)score FROM score GROUP BY stuid ORDER BY score DESC)score
LEFT JOIN student ON score.stuid = student.stuid
LEFT JOIN class ON student.classid = class.classid
GROUP BY classname ORDER BY score DESC
【mysql三表查询分组后取每组最大值,mysql面试题。】错误语句:
SELECT student.*,class.*,score.*,MAX(score)
FROM student LEFT JOIN class ON student.classid = class.classid
LEFT JOIN(SELECT stuid ,MAX(score)score FROM score
GROUP BY stuid ORDER BY score DESC)score ON student.stuid = score.stuid
GROUP BY classname

    推荐阅读