Postgres和RedShift上的不同SUM值

时间:2018-08-19 14:40:20

标签: postgresql amazon-redshift

所以假设我有一个像这样的值列表

+---------------+ | hours_worked | |---------------| | 2.08333333333 | | 2.08333333333 | | 2.65 | | 4.93333333333 | | 5.08333333333 | | 5.08333333333 | | 5.7 | | 6.3 | | 7.05 | | 7.23333333333 | | 7.28333333333 | | 7.31666666667 | | 7.63333333333 | | 8.33333333333 | +---------------+

当我在Postgres中总结它们时,我得到了

+-------------------+ | sum | |-------------------| | 76.68333333333331 | +-------------------+

但是,当我在Redshift中将完全相同的值求和时,我得到了

+---------------+ | sum | |---------------| | 78.7666666667 | +---------------+

我手动添加了它们,Redshift总和更加准确。为什么会出现这种差异?

1 个答案:

答案 0 :(得分:3)

起初,我认为这是floating point算术的一种情况。然后,我建议尝试在PostgreSQL中尝试其他数据类型,例如numeric

但我认为这不再是问题。我很确定您没有为postgres提供与redshift相同的数据。在postgres中,以下内容产生78.76666666664

select sum(q.hours) from (
    select 2.08333333333 as hours union all
    select 2.08333333333 union all
    select 2.65 union all
    select 4.93333333333 union all
    select 5.08333333333 union all
    select 5.08333333333 union all
    select 5.7 union all
    select 6.3 union all
    select 7.05 union all
    select 7.23333333333 union all
    select 7.28333333333 union all
    select 7.31666666667 union all
    select 7.63333333333 union all
    select 8.33333333333
) as q

根据数字,您似乎没有添加前两个条目2.08333333333之一。除去其中的一个,您得到76.68333333331,与您的第一个测试相同。