让我们考虑一个包含列(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)
我理解为什么这不起作用,但我不知道如何扭转它并让它发挥作用。有没有办法定义自定义聚合函数?还有其他想法吗?
答案 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")