我正在运行Hive 1.1.0,看到对于两个bigint
列,active_users
和inactive_users
,SUM(active_users + inactive_users)
<SUM(active_users) + SUM(inactive_users)
。
既然是简单的整数加法,为什么会这样呢?
答案 0 :(得分:3)
当一个但不是两个值均为NULL
时就是这种情况。
所以,请考虑:
a b
1 1
2 NULL
NULL 3
然后sum(a) + sum(b)
是(1 + 2)
和(1 + 3)
= 7的总和。NULL
被忽略。
但是,sum(a + b)
是以下各项的总和:
(1 + 1)
(2 + NULL)
(NULL + 3)
计算结果为:
2
NULL
NULL
NULL
被忽略,因此结果为2。
换句话说,SUM()
会忽略NULL
个值,而+
不会。
答案 1 :(得分:0)
有2种可能性:
1)如果列可为空,则不处理NULL
值
SUM(active_users + inactive_users)
SUM(active_users) + SUM(inactive_users)
-- should be
SUM(COALESCE(active_users,0) + COALESCE(inactive_users,0))
SUM(COALESCE(active_users,0)) + SUM(COALESCE(inactive_users,0))
2)如果列的数据类型不正确,例如FLOAT
,则可能会累积舍入错误。