阿里面试官:数据库 SQL怎样查询

看下一面数据库面试题

面试题:

他们的成绩存放在下表中,现在需要查询每个班的最高分同学,并且显示该同学的名字!

数据库 SQL经典面试题-数据库查询-子查询应用一

附建表和初始化数据

-- 1:创建表CREATE TABLE tb_lemon_grade (

分析题目:

数据表中每行记录保存的是每个学生的姓名、各科成绩和班级,现在需求是求出每个班的最高分,所以肯定需要以班级去进行分组(GROUP BY),那最高分的筛选呢,使用聚合函数MAX()吗? 我们说MAX()是求纵向的最大值,但是现在需要求最高分,意思是同一个同学的各科目间也得进行比较,上图红色加粗的成绩就是每个班的最高分,这是通过肉眼查看心算比较得到的结果,我们的心算过程非常简单:找到这个班的所有成绩,再比较各个成绩值,找出最大的分数(重复的也算,相当于并列第一)。 因此,还需要横向的比较!这里介绍一个函数:GREATEST(),看官方的帮助文档,下面的语法说明和例子告诉我们,GREATEST()函数可以返回多个参数间的最大值:

数据库 SQL经典面试题-数据库查询-子查询应用一

现在开始写SQL:

第一步:先找出每个班的最高分

先分组、再进行MAX()纵向比较得到每科的最大分、再通过GREATEST()横向比较,进而得到该班级的最高分!SELECT class_name, GREATEST( MAX(Linux), MAX(MySQL), MAX(Java))FROM tb_lemon_grade GROUP BY class_name;

数据库 SQL经典面试题-数据库查询-子查询应用一

第二步:怎么求出每个班的最高分同学?

第一步我们已经得到了每个班的最高分,注意这个最高分并不能确定是某个同学的,因为可能存在多个同学都是最高分(比如班级18期的陈二和张三,都有一科为最高分90分) 通过自然思维筛选出最高分的过程:我已知了该班级的最高分为90分,然后我会拿到这个分数会和这个班中的每个同学的各科分数进行笔记,如果某同学有一门课程的分数也是90分,那就是我们要找的同学! 是不是很好理解?所以,我们先求出每个同学的最高分

第三步:求出每个同学的最高分(横向得到该同学各科的最高分)

SELECT *, GREATEST(Linux, MySQL, Java) maxScore

数据库 SQL经典面试题-数据库查询-子查询应用一

第四步:两个子查询的结果集关联查询!

通过两个子查询,一个是每个班的最高分学习,一个是每个同学的信息和最高分!

SELECT t2.class_name, t2.student_name, t1.maxScore

数据库 SQL经典面试题-数据库查询-子查询应用一

下面分享一些我收藏资料,希望可以帮到大家

这份资料整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。对于软件测试的的朋友来说应该是最全面和完整的备战仓库了,这个仓库也陪伴我走过了很多坎坷的路,希望也能帮助到你。关注微信公众号:程序员二黑,就可以直接获取了
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值