Postgres 浮点列总和增量。更新架构或使用强制转换?

Postgres float column sum delta. Update schema or use cast?

提问人:4d61726b 提问时间:2/12/2023 更新时间:2/12/2023 访问量:38

问:

这不是一件新鲜事,但我只是想听听你的意见。 在这种情况下,更好的解决方案是什么:

有一列具有浮点值:

Column   | Type | Collation | Nullable |                     
----------------------------------------
work_res | real |           | not null |

当我计算整个表时,它给出了一个值,假设 100.2123sum

select sum(work_res) from work_data
>> 100.2123

但是当我处理相同的数据并首先进行分组时,然后进行 do ,那么总和是 100.9124sum

select sum(gd.work_res)
from (
    select type, sum(work_res) as work_res
    from work_data
    group by type
  ) as gd

>> 100.9124
  • type例如,列只是作为分组依据的列

所以问题就在这里。如果我将在 sum 函数中使用 cast to,那么数字是相同的。double precision

select sum(cast(work_res  as double precision)) from work_data
>> 100.9124

您能否告诉我什么是更好的解决方案:

  • 每次都使用投射
  • 更新架构

列中的值可以在 (0, 1) 范围内。 例如,它可以是:0.(3)、1、0.5、0。(1)以此类推

我认为在这两种情况下,我仍然会看到一个小的增量。右?

多谢

SQL PostgreSQL 强制转换 架构

评论

0赞 Frank Heikens 2/12/2023
您想要解决方案(更新架构)还是变通方法(每次都强制转换)?
1赞 nbk 2/12/2023
您应该使用十进制并优化您需要的精度,浮点数本质上具有分形

答: 暂无答案