Postgresql Postgres和RedShift上的不同和值

Postgresql Postgres和RedShift上的不同和值,postgresql,amazon-redshift,Postgresql,Amazon Redshift,假设我有一个这样的值列表 +---------------+ |工作时间| |---------------| | 2.08333333333 | | 2.08333333333 | | 2.65 | | 4.93333333333 | | 5.08333333333 | | 5.08333333333 | | 5.7 | | 6.3 | | 7.05 | | 7.23333333333 | | 7.283333333

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


+---------------+
|工作时间|
|---------------|
| 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 |
+---------------+

当我在研究生中总结他们时,我得到了这个


+-------------------+
|总数|
|-------------------|
| 76.68333333333331 |
+-------------------+

然而,当我用红移求和时,我得到了这个值


+---------------+
|总数|
|---------------|
| 78.7666666667 |
+---------------+


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

起初我认为这是一个算术的例子。然后我会建议尝试PostgreSQL中的其他数据类型,例如

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

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.08333333
。去掉其中一个,你会得到
76.68333331
,和你的第一次测试一样。

起初我认为这是一个算术的例子。然后我会建议尝试PostgreSQL中的其他数据类型,例如

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

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.08333333
。删除其中一个,您将获得与第一次测试相同的
76.68333333331

这不会测试浮点算术问题案例。。您需要使用带有数据类型的实表来test@RaymondNijland我测试了更多的数据类型。我可以发布它们,但基于错误的大小,没有意义。他只是忘记了一个条目。或者将它们转换为字符串。
decimal
numeric
real
float
转换数据类型之间确实没有浮点算术上的差异。。顺便说一句,真正的数据类型是四舍五入的。。“他只是忘记了一个条目”是的,这里就是这个例子。嗨,我看过数据,似乎没有“遗漏条目”(我真的希望是这样),这不会测试浮点算术问题案例。。您需要使用带有数据类型的实表来test@RaymondNijland我测试了更多的数据类型。我可以发布它们,但基于错误的大小,没有意义。他只是忘记了一个条目。或者将它们转换为字符串。
decimal
numeric
real
float
转换数据类型之间确实没有浮点算术上的差异。。顺便说一句,真正的数据类型是四舍五入的。。“他只是忘记了一个条目”是的,这里就是这样。嗨,我已经查看了数据,似乎没有“丢失条目”(我真的希望是)请对两个系统运行此命令:
SELECT SUM(hours_worked)、AVG(hours_worked)、MIN(hours_worked)、MAX(hours_worked)、COUNT(hours_worked)从表
中确认数据相同且总和仍然不同。请对两个系统运行此命令:
选择总和(工作小时数)、平均值(工作小时数)、最小值(工作小时数)、最大值(工作小时数)、计数(工作小时数)从表
中确认数据相同,并且总和仍然不同。