SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)

SQL语句查询之查询成绩表中每一科最大成绩的学生信息
之前面试的时候遇到这样一个题目,要我写个SQL查询语句查询出一个成绩表中每一个学科成绩最好的学生的信息,当时一时想不起来,回来之后各种百度,发现别人写的方法太复杂自己才疏学浅看不懂,没办法,求知欲又强,所以就自己创了一个成绩表,百度半天SQL语句的查询用法,一下一下的查询,最后终于被我试了出来,话不多说开始我们的查询过程。
1. 刚开始我创建了一个学生信息表如下图所示:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第1张图片
2. 然后我首先试着查询每一科的最大成绩,查询语句为:SELECT MAX(score) FROM student GROUP BY subject
查询结果如下:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第2张图片
3.如图可以看到我们查询出了每一科最好的成绩,但是只显示出了成绩没有显示学科,我们在查询语句的查询项里把学科加上:SELECT subject,MAX(score) FROM student GROUP BY subject
查询结果如下:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第3张图片
4. 从图中我们可以看出每一科的最大成绩跟哪一科都是对上了的,查询结果正确,但是令人头疼的就来了,面试要求是查询学生的名字+学科+最大成绩(我当时的面试题目是这样,但想来都大同小异),当我把学生名字加上去的时候问题就出来了,SQL语句:SELECT name,subject,MAX(score) FROM student GROUP BY subject
查询结果如下:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第4张图片
5. 从图中我们可以看出名字跟学科后面的最大成绩对不上,这里我也不知道咋回事,可能是数据库直接看了学科,符合这个学科的第一个名字就查询了上来,反正结果不是我们想要的结果,后来我就想,既然它只看了学科就查询了人,那么我们能不能让它看成绩来查询人呢?说干就干,我首先弄了一个嵌套查询,让数据库按照查询出来的分数进行找人,SQL语句为:SELECT name,subject,score FROM student WHERE score in(SELECT MAX(score) FROM student GROUP BY subject)
查询结果如下:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第5张图片
6. 如图所示数据库把跟每一科最高成绩一样的学生全部找了出来,但这不是我们想要的结果,我们只需要每一科的最高成绩,而不是跟最高成绩一样的分数就可以,后来我查询了一下SQL语句的嵌套查询方式,发现将查询出来的表当成一个子表来进行嵌套查询,可以进行多个匹配,也就是说,在第3步的查询结果上,我们在外面加一层SQL查询语句来匹配这个结果,当学科与最大成绩都匹配上的时候我们才把查询结果显示出来,这样就行了,SQL语句为:SELECT * FROM student WHERE (subject,score) in (SELECT subject,MAX(score) FROM student GROUP BY subject)
查询结果为:
SQL查询之查询成绩表中每一科最大成绩的学生的所有信息(之前遇到一个面试题当时想不起来,回来后自己用数据库试了出来)_第6张图片
7.由上图我们可以看出,经过了多次尝试,我们终于将想要的结果查询了出来,不容易啊,这里select *是查询这个表中关于这一科最大成绩的学生的这一行的所有信息,大家可以根据自己的需求查询对应信息,比如select name查询名字,select id查询id,根据自己的需求加入要查询的信息的列名,希望这篇文章能够对大家有所帮助吧(!)。

你可能感兴趣的:(SQL查询)