为什么sum(0)有时为null有时为0

bravility
  • 239

1.有以下mysql查询语句

select sum(CASE state when 3 then 1 else 0 end) as deliver,count(1) as orderAll from table

2.理论上这句话的意思是,查询table表中所有状态为3的订单即为发货数量,以及查询总订单数。可是当table为空白时,查询到的内容为

deliver orderAll
(Null) 0

3.自我剖析

sum(CASE state when 3 then 1 else 0 end)

这段代码的逻辑应该为当state字段为3时记为1,其他时记为0,空表则state无值,此时逻辑是

select sum(0) as deliver,count(1) as orderAll from table

4.进一步深挖发现,当table为空表时,sum(0)为null;当table非空时,sum(0)为0.

#1.table为空表
select sum(0) from table
SUM(0)
(Null)
#2.table不为空表
select sum(0) from table
SUM(0)
0

5.问:为什么两个sum(0)的结果不一样?

回复
阅读 6.1k
2 个回答
✓ 已被采纳

因为空表是sum(0)实际上是sum(null)结果还是null
不为空表时sum(0)为sum(0+0+0+..)结果就是0

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏