在sql中遇到除数为0的错误时候的解决办法

今天在做项目的时候需要计算满意度的和点击次数显示在页面上:


其中满意度的计算方法为:总的评价分数/总的评价人数

然后我开始写的查询语句为:

select doctorid , sum(gradescore)  /sum(isgrade)  satis from jkmh_webcms.tcm_consult group by doctorid 

但是在plsql运行的时候报错了:


除数为0意思就是sum(isgrade)计算的值有为0的即分母为0就会报错

然后我就做了如下修改:

select doctorid , sum(gradescore)  /sum(case when isgrade = '0' then '1' else '0' end)satis from jkmh_webcms.tcm_consult group by doctorid 

对分母做了一下判断:

sum(case when isgrade = '0' then '1' else '0' end)的意思就是当isgrade=0即评价了医生的话就按1计算,否则isgrade=1没有评价的话就按0计算

继续在plsql运行没想到还是报错:除数为0

我一想当没有人评价医生的话都是按0计算,当然计算的值的总的值还是为0了,所以我就又做了下面的改变:

select doctorid , sum(gradescore) /sum(case when isgrade = '0' then '1' else null end)satis from jkmh_webcms.tcm_consult group by doctorid 

这个下就运行成功了,大家可以看出我把当遇到0的情况转返回了null这下就可以计算了,至于为什么改成null就可以计算了,我也不知道,哎。。。。。。
sum(case when isgrade = '0' then '1' else null end)

希望大家以后在做除法的时候留心判断一下分母的条件,表像我一样粗心,哈哈

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值