楼主: 安安、静静
10847 3

[疑难问题] sql语句,case when 搭配max()该如何理解 [推广有奖]

  • 0关注
  • 0粉丝

小学生

7%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
0.1500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
86 点
帖子
3
精华
0
在线时间
5 小时
注册时间
2013-11-7
最后登录
2022-9-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
表信息为:create table SC(SID tinyint,CID tinyint,score tinyint)charset utf8;set names gbk;
insert into SC
values(01,01,80),(01,02,90),(01,03,99),(02,01,70),(02,02,60),(02,03,80),(03,03,80),(04,01,50),(04,02,30),(04,03,20),(05,01,76),(05,02,87),(06,03,34),(07,02,89),(07,03,98),(03,01,80),(03,02,80),(06,01,31);
需要查找:按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩。


sql语句为

select Sid,max(case Cid when '1' thenscore else 0 end)'01',  

max(case Cid when '2' then score else 0end)'02',  

max(case Cid when '3' then score else 0end)'03',AVG(score)平均分 from SC  

groupby Sid order by 平均分 desc  ;
显示结果为:



不加max()函数的sql语句:

select Sid,(case Cid when '1' then scoreelse 0 end)'01',  

(case Cid when '2' then score else 0end)'02',  

(case Cid when '3' then score else 0end)'03',AVG(score)平均分 from SC  

group by Sid order by 平均分 desc  ;


显示结果为:

想问一下 为什么要加max()函数呢?该怎样理解?谢谢


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
kejiayuan0806 在职认证  发表于 2018-5-31 15:15:53 |只看作者 |坛友微信交流群
max()函数检索的是每个学生每个科目的分数,不加max()函数检索的是每个学生按原数据表中的顺序的第一个科目的分数

使用道具

藤椅
escaflowne1985 在职认证  发表于 2018-6-11 14:07:57 |只看作者 |坛友微信交流群
不是检索最大值么?

使用道具

板凳
kejiayuan0806 在职认证  发表于 2018-6-20 15:00:34 |只看作者 |坛友微信交流群
case when实现行列转换时会出现多条记录,如果不用聚合函数直接进行group by分组,那么检索的是基表里分组字段的第一条记录,如果使用max()函数之后再进行group by分组,那么就会检索每个字段的最大值然后再分组

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-5 02:23