我有两个属性我试图平均,但它只是在这里平均第二个字段。有没有办法做到这一点?
e = TiEntry.where('ext_trlid = ? AND mat_pidtc = ?', a.trlid, a.pidtc).average(:mat_mppss_rprcp && :mat_fppss_rprcp)
答案 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)
这只会执行一次查询
我希望这对你有用