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

错误语句:
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