Ruby Rails在返回多个对象的查询中平均两个属性

时间:2016-12-24 14:52:12

标签: ruby-on-rails ruby activerecord

我有两个属性我试图平均,但它只是在这里平均第二个字段。有没有办法做到这一点?

 e = TiEntry.where('ext_trlid = ? AND mat_pidtc = ?', a.trlid, a.pidtc).average(:mat_mppss_rprcp && :mat_fppss_rprcp)

2 个答案:

答案 0 :(得分:0)

e = TiEntry.where('ext_trlid = ? AND mat_pidtc = ?', a.trlid, a.pidtc).select("AVG(mat_mppss_rprcp) AS avg1, AVG(mat_fppss_rprcp) AS avg2").map { |i| [i.avg1, i.avg2] }

这适合你吗?它的工作方式与普通方法相同,但您可以根据需要支持值

此处和其他查询之间的优点是它只使用一个简单的SQL查询。其他人用SQL中的所有内容获取表格(如果表格很大,可能需要一些时间)然后用ruby语言计算平均值

答案 1 :(得分:-1)

我相信你已经准备好了http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-average

但是你无法得到2件事的平均值。

您不能重复查询的内容是:

 entries = TiEntry.where('ext_trlid = ? AND mat_pidtc = ?', a.trlid, a.pidtc)
 average_mppss = entries.average(:mat_mppss_rprcp)
 average_fppss = entries.average(:mat_fppss_rprcp)

这只会执行一次查询

我希望这对你有用