ActiveRecord给出错误的计算结果

时间:2015-07-29 17:23:03

标签: ruby-on-rails postgresql activerecord

我试图在ActiveRecord中进行计算,虽然我没有正确的数据,所以我练习使用我拥有的一些数据。 (这就是为什么这个例子不具备逻辑意义的原因)

这是我从

开始的
Report.sum("p")
=> 11749577
Report.sum("c")
=> 2534695

因此,总和应为14284272

然而,我后来继续

Report.sum("p+c")
=> 7976209

当然,我永远不会真正做到这一点,但我后来需要用乘法来做。我已尝试过各种方式(使用空格,使用calculate等),但我似乎总是得到错误的答案。

此外,对减法求和也给出了同样奇怪的答案:

Report.sum("p-c")
=> 2906819

另外,我知道在对一个变量进行求和时我应该使用符号,但它会得到相同的结果。

顺便说一下,我使用的是PostgreSQL。

任何人都可以帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我最好的猜测是,你在这些列上使用了一个smallint,当你做一笔总和(或沿着这些行的某些东西)时,你会使用smallint的大小。

要进行故障排除,ActiveRecord只是使用sql来获得此结果。查看development.log文件的结尾,您将看到生成的sql类似于SELECT SUM(p+c) AS sum_id FROM reports。如果直接对数据库运行相同的查询,是否会得到相同的结果?