mysql - 转换为十进制的 varchar 的聚合没有给出正确的答案

标签 mysql sql casting

最近我们遇到了一个报告生成问题,其中聚合 (SUM()) 是对 varchar 值执行的。 这些值是存储的工时,它们是整数值,例如:456.9。 由于我们正在进行维护,因此无法更改表格设计。 经过一些研究后,我通过添加一些显式转换来修改查询。

select ts.changedto as CHANGEDSTATE,
    cast(sum(coalesce(cast(trim(tw.estimatedhours) AS DECIMAL(5,2)),0)) AS UNSIGNED) as ESTIMATEDHOURS,        
    cast(sum(coalesce(cast(trim(tw.actualhours) AS DECIMAL(5,2)),0)) AS UNSIGNED) as ACTUALHOURS
    from tstatechange ts
                  left outer join tworkitem tw on (ts.workitemkey=tw.workitemkey)
                       left outer join tprojcat pc on (tw.prOJCATKEY = pc.pKEY)
                             where (ts.changedto = '8') and ts.lastedit between '2012-02-01  00:00:00' and '2012-02-28 23:59:59'
                                   and pc.projkey = 39 group by CHANGEDSTATE;

甚至这个查询也返回了错误的值。 例如对于这些值手动求和

(89.35
96
11.15
0
0.1
92
1
609.05
61.25
0.5
1
0.5) 

产生 961.9 但查询返回 963。 谁能帮我解决这个问题。是否有任何特殊功能或任何其他解决方法?

最佳答案

我认为您的查询存在四舍五入的问题。那两个 0.5 可能变成两个 1。给963.你用的是什么数据库?

关于mysql - 转换为十进制的 varchar 的聚合没有给出正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9603858/

相关文章:

mysql - 如何查看 MySQL 中外键的 ON DELETE 和 ON UPDATE?

使用 TreeMap 时的 Java "cannot cast to Comparable"

Python Twistd MySQL - 获取更新的行 ID(不插入)

mysql - 如何在 MySQL 中获取最后三行

sql - SQL Server 中 SUM() 的对应项是什么?

java - 插入、替换/更新 JDBC

java - 如何基于字符串创建新类型的对象?

C# WPF 迭代子项和更改属性的更好方法

mysql - 从自动启动中删除 mysql

MYSQL JSON select查询每次运行返回不同的结果