首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Hive中的SUM(a + b) != SUM(a) + SUM(b)?

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

Stack Overflow用户
提问于 2019-06-19 01:41:30
回答 2查看 233关注 0票数 0

我运行的是配置单元1.1.0,对于两个bigint列,active_usersinactive_usersSUM(active_users + inactive_users) < SUM(active_users) + SUM(inactive_users)

为什么会这样,因为它应该是一个简单的整数相加?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-19 01:46:33

当一个值但不是两个值都为NULL时,就会出现这种情况。

因此,请考虑:

代码语言:javascript
复制
 a     b
 1     1
 2     NULL
 NULL  3

sum(a) + sum(b)是:(1 + 2)(1 + 3) = 7的和。NULL被忽略。

但是,sum(a + b)是以下各项的总和:

代码语言:javascript
复制
 (1 + 1)
 (2 + NULL)
 (NULL + 3) 

其计算结果为:

代码语言:javascript
复制
 2
 NULL
 NULL

NULL将被忽略,因此结果为2。

换句话说,SUM()会忽略NULL值,但+不会。

票数 3
EN

Stack Overflow用户

发布于 2019-06-19 02:09:10

有两种可能性:

1)如果列可以为NULL,则不处理null值

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56654428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档