Oracle - sum,decode,sign简单实现单值范围统计

    我们一般用count函数进行简单的数量统计.例如查询某班数学成绩小于60的学生人数,可以直接用count加where统计出来,但是如果这个班所有学生的人数都大于60分则查询结果为空而不是0,并且如果要联合查询语文数学英语等各个科目的不及格人数,若某科查询结果为空则该科目将无任何显示,如果还要查询成绩在60-80,80-90等各个分数段人数...尽管我们可以用一些手段让count显示0但那会愈加麻烦.
    此时我们想到可以通过sum函数用case when then或decode将符合条件的分数转换成个数来方便地实现范围统计.其中case when then既能进行单值转换,又能实现范围转换,是理想的实现方案;而decode的特性跟case when then相似,但似乎只能单值转换.这里就要进入正题--sum,decode,sign结合简单实现单值范围统计


1.单向范围的数量统计
例:统计score<60的人数
sum(decode(sign(score-60),-1,1,0))
2.区间范围的数量统计
例:统计score>=60 && score<=80的人数
sum(decode(sign((score-60)*(score-80)),-1,1,0,1,0))

当然此实现方法效率并不可观

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值