空字段引发的惨案

惨案经过:
有一张效果广告的表tmp_xiaoguo_table,有字段 dt 日期,order_id 订单,ocpx_stage ocpx阶段(ocpx单子才有),price金额。

dt  string  "日期"
order_id  bigint "订单id"
ocpx_stage  tinyint "ocpx阶段 "
price  decimal(28,2) "金额"

数据如下:

2019-11-28    1     1    250.01
2019-11-28    2     2    250.01
2019-11-28    3    null   250.01

现在要查ocpx中非二阶段的金额,写的sql代码如下:

select 
dt,
sum(if(ocpx_stage<>2,price,0)) as second_stage_price
from tmp_xiaoguo_table
group by dt

查询结果:250.01
what?what?what?
问题原因:
在进行<>的时候,会做类型判断,将null值去掉!!!
修改

select 
dt,
sum(if(nvl(ocpx_stage,-1)<>2,price,0)) as second_stage_price
from tmp_xiaoguo_table
group by dt

查询结果:500.02
建议:
在设计模型数据时给予此类维度无意义的默认值,以防后续判断或者关联时出现错误!

吼吼~~ 更多内容请关注公众号~


8940211-3703b0ae096473a2.png
任乌拉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值