sql:Group by配合max出现的问题?

 我来答
舒适还明净的海鸥i
2022-06-19 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70.1万
展开全部

找出每个学生分数最高的科目和成绩

1.对学生id 进行group by 配合Max从成绩表中查出每个学生最高的分数

2.我想把学生名称也显示出来,这时候就要联合student表进行联合查询了

3.这时候问题还没暴露出来, 我们再来把功课名称展现出来

这时候问题就暴露出来了: 成绩表名称是错误的 ,和原来的成绩表对比下很容易发现张三最高的成绩是数学。

1.其实我们进行第3步查询的时候首先会遇到以下错误
「ERROR 1055 (42000): Expression #4 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'demo.g.grade_course' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by」
原因解析:由于grade_course 不在 group by 的范围中,所以会报以上错误,可以参考 mysql 新版本出现group by 语句不兼容问题 博客中的方式暂时解决,但这不是最好的方法,也不满足我们的需求。
2.为什么筛选出来的成绩表名称是错误的?
因为mysql执行group by配合聚合语句比如max时,对于不在group中的字段,会取遇到的第一条数据中该字段对应的数据,在例子中就是语文了,而不是成绩最高的那一条数据中的课程名。

2.sql解析

注:遗留问题,因为例子中成绩表的设计问题,如果有学生同一门课成绩相同,上面的sql是有问题的,所以聚合函数出来的值要和其他值能在查询表中形成唯一键才ok。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式