浮点数的 SQL 分组精度

Posted

技术标签:

【中文标题】浮点数的 SQL 分组精度【英文标题】:SQL group by precission for floats 【发布时间】:2021-11-01 13:39:52 【问题描述】:

我遇到了一个有点奇怪的问题。我需要按定义的精度对 SQL 结果进行分组。数据库系统是 PostgreSQL,我们总共有几亿个值。

例如,假设我有以下群众的列表

    1.0005 1.0010 3.0000 4.0016 4.0014

这些都是 Dalton 中的化学质量,我想在一个物化视图中按 +/-5 mDa 和在另一个物化视图中按 +/- 10mDa 对它们进行分组。所以 0.0005 和 0.0010。

有人可以帮忙吗?

【问题讨论】:

提示:SELECT TRUNC(4.0016 * 10000 / 5), TRUNC(4.0014 * 10000 / 5), TRUNC(4.0016 * 10000 / 10), TRUNC(4.0014 * 10000 / 10). 你的问题不清楚,给我们一些期望输出的例子 它们实际上是浮点型还是十进制类型? 【参考方案1】:

感谢@Jeroen Mostert,这似乎可以解决问题。

从 result_annotations_msms racm 中选择 avg(ion) 作为 ion,sum(intensity) 作为强度,其中 "method" = 'a' and target_id = 'b' group by TRUNC(ion * 1000 / 5)

【讨论】:

以上是关于浮点数的 SQL 分组精度的主要内容,如果未能解决你的问题,请参考以下文章

python浮点数精度问题

什么是浮点数格式?

js浮点数精度误差问题,解决方法

浮点数中单精度和双精度的编码表示

ieee754单精度浮点数 表示方法

VB单精度、双精度浮点数误差,如何消除