打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MySQL复杂查询:连接查询+取某个类型的最大值
【数据库优化】记一次Mysql的优化经历
在GridView中使用DropDownList模板列
经典必收藏的sql应用案例
python理解描述符(descriptor)
MySQL 备份和恢复(一)mysqldump
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服