一,这是一道面试题,有如下三张表,查询每班分数最高的学生。
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
【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
推荐阅读
- mysql|InnoDB数据页结构
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- mysql|一文深入理解mysql
- Java毕业设计项目实战篇|Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)
- SQL|SQL基本功(五)--函数、谓词、CASE表达式
- vue|电商后台管理系统(vue+python|node.js)
- Java及基础算法及数据结构|旧笔记整理(MySQL)
- mysql|双非本211硕,无实习无项目,自学大数据开发,秋招上岸
- 数据库|Mysql--InnoDB存储引擎详解
- MySQL学习笔记-9-order by