ORACLE关于case when语句

大家好,下面我来讲解一下我初学oracle的见解,因为由于我之前曾学过SQL Server的原因,有了前面的基础铺垫,刚学oracle也没有觉得过于的难度,关于什么子查询和连表查询等都是前者的基础;其中,碰到有一些难题,后来通过查资料和努力思考,最终还是悟出来了。

    其中,最好玩和最有用的是oracle里面的case when…then… else …end语句,刚开始学的时候还是懵懂懵懂的,不是很懂,后来老师给了很多关于oracle的作业,做着做着慢慢就懂了很多,下面我来讲几个例子。

1、题目:统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

代码和结果如下,

 

 

select cou.cno ,cou.cname,count(case when sc.score<=100 and sc.score>=85  then 1 else null end) as "[100-85]" ,

   count(case when sc.score<85 and sc.score>=70  then 1 else null end) as "[85-70]",

   count(case when sc.score<70 and sc.score>=60  then 1 else null end) as "[70-60]",

   count(case when sc.score<60 then 1 else null end) as "[ <60] from course cou,sc where cou.cno=sc.cno group by cou.cno ,cou.cname;

 

select cou.cno ,cou.cname,

(case when sc.score<=100 and sc.score>=85  then 1 else null end) as "[100-85]" ,

(case when sc.score<85 and sc.score>=70  then 1 else null end)

 as "[85-70]",

(case when sc.score<70 and sc.score>=60  then 1 else null end)

 as "[70-60]",

(case when sc.score<60 then 1 else null end) as "[ <60]"

from course cou,sc

然后根据cno(课程号)来分组并且用count字段进行合计返回的结果,空值(不算入内)。

同理可得,那是不是如果我拥有整个世界人口数据库,想要知道,世界各个国家各个年龄段还有分别是男是女,根据国家来分组,那我就可以得到我想要的数据。

 

其实原理很简单,其中case when语句很重要它可以根据条件的筛选来创建新的的结果列,就是说用case when语句分别查出各分数段的列,如满足结果返回1,不满足则返回空,结果代码如下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值