列出每位学生的各科成绩,要求输出格式:姓名、语文成绩、数学成绩、英语成绩

最近遇到一个面试题,根据所给出的表信息,列出每位学生的各科成绩,要求输出格式:姓名、语文成绩、数学成绩、英语成绩

下面我们来看一下具体的写法和需要注意的地方:

这是我们需要用到的两个表:(具体内容或者字段信息,可以根据自己的想法去设计)

 下面我们对以下几种sql语句的情况进行分析: 

 结合两张图我们可以很明显的看出结果不同,第一个sql语句中没有加max,而第二个加了max,  很容易看出第一个的结果是不对的

 为什么会出现这种情况,我们来具体分析一下:

首先我们根据第一张图中的sql语句分析,我们执行的是分组后的数据,假设我们在不分组的情况下执行,则会出现下面的情况:

 在此基础之上,我们再执行 group by 语句,因为没有聚合函数,则它将会取出基表group by后的第一条数据:(使用group by后为什么要用聚合函数我们可以参考这篇博客)

 也就会出现我们第一次执行sql的数据结果:


 好的,下面我们来看第二个sql语句,假设我们在不分组的情况下执行:

 由前面一个的思想我们就很好的理解了为什么会出现这种情况,

 如果不分组,则它会按照max聚合函数执行后取出最大的分数然后返回给我们第一行数据。

所以当我们的第二个sql语句对case when  "课程 " then  s_score分数进行了max()函数取出最大分数,同时又按照了s_name名字分组,自然而然就的得到了我们的正确答案:

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

错把路灯看作月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值