activerecord自定义聚合

时间:2011-02-21 20:24:12

标签: ruby-on-rails activerecord aggregate

让我们考虑一个包含列(id,location_id,created_at,counter_1,counter_2)的图像表,以下查询工作正常:它为我提供了每个location_id的最新图片:

Image.where(:created_at => Image.maximum(:created_at, :group => :location_id).values)

但是现在我想,对于每个位置,具有最大值的图像(counter_1 + 3 * counter_2)并且以下查询不起作用(并且在语义上是错误的,但只是为了解释我想要实现的内容):

Image.where("counter_1 + 3*counter_2" => Image.maximum("counter_1 + 3*counter_2", :group => :location_id).values)

我理解为什么这不起作用,但我不知道如何扭转它并让它发挥作用。有没有办法定义自定义聚合函数?还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

试试这个

Image.group(:location_id).order("(counter_1 + 3*counter_2) DESC")

<强> UPD

Image.select("*, (counter_1 + 3*counter_2) as counter").group(:location_id).order("counter DESC")