您的位置:首页 > 数据库 > Oracle

查询如下课程平均成绩和及格率的百分数(用"1行"显示),使用两种方式实现。

2016-11-30 01:58 609 查看
1.查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),UML (003)

第一种为传统的case when使用方式:

select
sum(case when sc.cid=001 then sc.score else 0 end)/sum(case when sc.cid=001 then 1 else 0 end) as 企业管理平均成绩,
100*sum(case when sc.cid=001 and nvl(sc.score,0)>=60 then 1 else 0 end)/sum(case when sc.cid=001 then 1 else 0 end)||'%'as 企业管理及格率,
sum(case when sc.cid=002 then sc.score else 0 end)/sum(case when sc.cid=002 then 1 else 0 end) as 马克思平均成绩,
100*sum(case when sc.cid=002 and nvl(sc.score,0)>=60 then 1 else 0 end)/sum(case when sc.cid=002 then 1 else 0 end)||'%'as 马克思及格率,
sum(case when sc.cid=003 then sc.score else 0 end)/sum(case when sc.cid=003 then 1 else 0 end) as UML平均成绩,
100*sum(case when sc.cid=003 and nvl(sc.score,0)>=60 then 1 else 0 end)/sum(case when sc.cid=003 then 1 else 0 end)||'%'as UML及格率
from sc查询结果:



第二种为:根据课程id扩展成绩表字段,让每一列只展示一门学科的成绩,方便使用sum和count函数(向省掉一些重复代码,实际上额外增加了其它代码,姑且一看吧)

select
sum(sc2.企业管理成绩)/count(sc2.企业管理成绩) as 企业管理平均成绩,
100*sum(case when sc2.企业管理成绩>=60 then 1 else 0 end)/count(sc2.企业管理成绩)||'%' as 企业管理及格率,
sum(sc2.马克思成绩)/count(sc2.马克思成绩) as 马克思平均成绩,
100*sum(case when sc2.马克思成绩>=60 then 1 else 0 end)/count(sc2.马克思成绩)||'%' as 马克思及格率,
sum(sc2.UMl成绩)/count(sc2.UMl成绩) as UML平均成绩,
100*sum(case when sc2.UMl成绩>=60 then 1 else 0 end)/count(sc2.UMl成绩)||'%' as UML及格率
from (
select
(case when sc.cid=001 then sc.score else null end)企业管理成绩,
(case when sc.cid=002 then sc.score else null end)马克思成绩,
(case when sc.cid=003 then sc.score else null end)UMl成绩
from sc
)sc2;查询结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 笔试题
相关文章推荐