已知如下数据库表,写出查询各门课的分数最高者的SQL语句,要求格式为“科目,学生名,分数”,并按科目Id排序
创始人
2024-06-01 12:22:13
0

题目描述

在某笔试题中遇到了这样的题目,之前学过数据库原理,但是这综合性太强,一下子犯了难。
在这里插入图片描述
在这里插入图片描述


解决过程

在数据库中建立上述表,以验证写的SQL对不对

平台:Navicate SQL 16 for MySQL
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

尝试写SQL查询

尝试1

第一次我直观写出来的SQL是这样的:

select Student_Id,Subject_Id,max(Score) from score group by Subject_Id;

运行一下:
在这里插入图片描述
发现并不正确,Subject_Id和max(Score)的关系是正确的,Student_Id的关系是错误的,都被匹配成了Id为1的学生。

原因:

如果要使用group by子句,那么在select指定的字段
要么就要包含在Group By语句的后面,作为分组的依据
要么就要被包含在聚合函数中

这里的Student_Id既没有包含在Group By语句的后面,作为分组的依据,又没有被包含在聚合函数中,所以得到的信息是错误的

尝试2

由于上面SQL运行出来的Student_Id的关系是错误的,于是把它在SQL中去掉再运行一遍看看

select Subject_Id,max(Score) from score group by Subject_Id;

在这里插入图片描述
这样正确找出了各门科目的最高分。

进一步往下思考,怎么得到相应的学生信息?
可以试试把刚刚查出的表和原Score表做一个连接
利用“科目-最高成绩”表,在Score成绩记录表中,找出各门成绩分数≥该门成绩最高分的学生Id,科目Id,分数

select score.Student_Id,score.Subject_Id,score.Score 
from score,(select Subject_Id,max(Score) Score from score group by Subject_Id) as score_new
where score.Subject_Id = score_new.Subject_Id and score.Score >= score_new.Score;

结果如下:
在这里插入图片描述
发现结果是对的。
发现最后的答案 要的是科目和学生名,而不是Id,这时候我们只需要在查询中连接一下科目表和学生表即可。

select subject.Subject_Name,student.Student_Name,score.Score
from student,subject,score,(select Subject_Id,max(Score) Score from score group by Subject_Id) as score_new
where student.Id=score.Student_Id and subject.Id=score.Subject_Id and score.Subject_Id = score_new.Subject_Id and score.Score >= score_new.Score;

查出来的结果为:
在这里插入图片描述
差不多大功告成了,还有一个问题就是,还没有将结果按照科目Id排序,再后面加一个order by字段试试。

select subject.Subject_Name,student.Student_Name,score.Score
from student,subject,score,(select Subject_Id,max(Score) Score from score group by Subject_Id) as score_new
where student.Id=score.Student_Id and subject.Id=score.Subject_Id and score.Subject_Id = score_new.Subject_Id and score.Score >= score_new.Score
order by subject.Id;

在这里插入图片描述
大功告成!


SQL答案

select subject.Subject_Name,student.Student_Name,score.Score
from student,subject,score,(select Subject_Id,max(Score) Score from score group by Subject_Id) as score_new
where student.Id=score.Student_Id and subject.Id=score.Subject_Id and score.Subject_Id = score_new.Subject_Id and score.Score >= score_new.Score
order by subject.Id;

相关内容

热门资讯

“文眼”,让佳作更亮丽!【推... “文眼”,让佳作更亮丽! 篇一文学作品是人类智慧的结晶,是文化传承的重要组成部分。然而,很多优秀的作...
新高考I卷山东高考作文【精彩... 新高考I卷山东高考作文 篇一:新高考改革下的挑战与机遇随着新高考改革的深入推进,山东高考也迎来了新的...
高考满分作文记叙文作文(实用... 高考满分作文记叙文作文 篇一失而复得的梦想那一年的高考,对我来说是一个重要的转折点。在备战高考的过程...
英语高考作文写作范文【精彩6... 英语高考作文写作范文 篇一标题:The Importance of Learning English...
扬长避短,方能成功高考优秀作... 扬长避短,方能成功高考优秀作文 篇一在高考备战的过程中,每个学生都有自己的优势和劣势。有的同学擅长理...
安徽高考作文解析及:像苏洵一... 安徽高考作文解析及:像苏洵一样教育孩子 篇一随着高考的临近,安徽省的学生们都在紧张备战,而其中最重要...
高考作文指导:借用章回小说笔... 高考作文指导:借用章回小说笔法开头 篇一纵观历届高考作文题目,我们会发现一个共同的特点,那就是题目往...
北京市高考满分作文未产生零分... 北京市高考满分作文未产生零分作文已出现 篇一近年来,北京市高考满分作文逐渐成为一种现象,令人瞩目。然...
浙江卷高考优秀作文【优选6篇... 浙江卷高考优秀作文 篇一桃花源的美丽桃花源,位于浙江的一个小村庄,以其独特的美丽而闻名。每年春天,当...
高考作文案例“以自己的方式改... 高考作文案例“以自己的方式改变世界” 篇一第一篇内容以自己的方式改变世界改变世界,是每个人心中的一个...
山东高考满分作文(推荐6篇) 山东高考满分作文 篇一:我的家乡山东山东,一个位于中国东部的美丽省份,是我热爱的家乡。这里有壮丽的自...
上海卷高考满分作文【精彩3篇... 上海卷高考满分作文 篇一如何做好高中生活的规划高中生活是人生中最重要的阶段之一,它不仅关乎我们的学习...
高考满分作文【实用6篇】 高考满分作文 篇一:《中国梦:我与未来的契约》中国梦,是每个中国人的梦想,是亿万人民的期盼。作为一名...
高考满分作文【通用6篇】 高考满分作文 篇一:坚持,让梦想照进现实高考,是每个学子心中的一道大关,更是一个人成长的里程碑。在这...
高考广东卷作文题目(经典3篇... 高考广东卷作文题目 篇一:探讨高考改革对学生综合素质的影响随着时代的发展和社会的变迁,高考作为一项重...
莆田新疆班将在莆田参加高考(... 莆田新疆班将在莆田参加高考 篇一新疆班是指由新疆籍学生组成的高中班级,这个班级通常由教育部门统一组织...
2019高考作文范文格式【最... 2019高考作文范文格式 篇一标题:人工智能对社会的影响人工智能(Artificial Intell...
高考作文题预测及:“天已微亮... 高考作文题预测及:“天已微亮” 篇一随着高考的临近,考生们无疑都对作文题目预测产生了浓厚的兴趣。因为...
辽宁的高考满分作文【优质6篇... 辽宁的高考满分作文 篇一辽宁的高考满分作文辽宁作为中国东北地区的一个重要省份,其高考制度一直备受关注...
江苏高考满分文言文作文《绿色... 江苏高考满分文言文作文《绿色生活》及译文 篇一绿色生活绿色乃大自然之底色也,人之生活当亦宜绿色。然而...