oracle 中分类统计:case when..then..else..end用法

本文通过SQL语句展示了如何从学生成绩表中统计每位学生的各科成绩总和及平均分,包括语文、数学和英语的成绩。通过CASE WHEN语句灵活筛选不同课程的成绩,并计算平均分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create table SC(SId varchar2(10),CId varchar2(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

1.SELECT SID ,sum(case  when  CID='01' then '1'  else '0' end) ,avg(sid) FROM SC group by SID order by SID

2.SELECT SID ,sum(case  when  CID='01' then score  else 0 end) ,avg(sid) FROM SC group by SID order by SID

在使用case when 条件1 then 结果1 else 结果2 end 时 要注意返回结果的数据类型要一致。

 

SELECT SID ,sum(case  when  CID='01' then score  else 0 end) as "语文" ,sum(case  when  CID='02' then score  else 0 end) as "数学" ,sum(case  when  CID='03' then score  else 0 end) as "英语" , cast(avg(score) as number(10,2)) FROM SC group by SID order by avg(score)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值