为什么Hive中的SUM(a + b)!= SUM(a)+ SUM(b)?

时间:2019-06-18 17:41:29

标签: sql hadoop hive

我正在运行Hive 1.1.0,看到对于两个bigint列,active_usersinactive_usersSUM(active_users + inactive_users) <SUM(active_users) + SUM(inactive_users)

既然是简单的整数加法,为什么会这样呢?

2 个答案:

答案 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,则可能会累积舍入错误。

更多信息:Avg of float inconsistency