全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SQL及关系型数据库数据分析
11671 3
2018-05-30
表信息为: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()函数呢?该怎样理解?谢谢


二维码

扫码加我 拉你入群

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

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

全部回复
2018-5-31 15:15:53
max()函数检索的是每个学生每个科目的分数,不加max()函数检索的是每个学生按原数据表中的顺序的第一个科目的分数
二维码

扫码加我 拉你入群

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

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

2018-6-11 14:07:57
不是检索最大值么?
二维码

扫码加我 拉你入群

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

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

2018-6-20 15:00:34
case when实现行列转换时会出现多条记录,如果不用聚合函数直接进行group by分组,那么检索的是基表里分组字段的第一条记录,如果使用max()函数之后再进行group by分组,那么就会检索每个字段的最大值然后再分组
二维码

扫码加我 拉你入群

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

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

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群