我运行的是配置单元1.1.0,对于两个bigint列,active_users和inactive_users,SUM(active_users + inactive_users) < SUM(active_users) + SUM(inactive_users)。
为什么会这样,因为它应该是一个简单的整数相加?
发布于 2019-06-19 01:46:33
当一个值但不是两个值都为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
NULLNULL将被忽略,因此结果为2。
换句话说,SUM()会忽略NULL值,但+不会。
发布于 2019-06-19 02:09:10
有两种可能性:
1)如果列可以为NULL,则不处理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,则可能会累积舍入错误。
https://stackoverflow.com/questions/56654428
复制相似问题