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

一,这是一道面试题,有如下三张表,查询每班分数最高的学生。 

1)学生信息表(学生)

学生

(2)班级信息表(类)

(3)成绩信息表(得分)

得分了

 

在网上找了很多帖子,发现查询出来的结果并非是分组后的最大值,而是分组后的第一条数据。感觉MAX()函数没有发挥作用。

尝试了很久终于找到了解决办法。希望可以帮到各位,还有DBA大哥不要喷小弟,小弟的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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值