本文主要是介绍空字段引发的惨案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
惨案经过:
有一张效果广告的表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
建议:
在设计模型数据时给予此类维度无意义的默认值,以防后续判断或者关联时出现错误!
吼吼~~ 更多内容请关注公众号~
这篇关于空字段引发的惨案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!