使用Rails检索“top x”记录的最有效方法

时间:2010-11-15 17:12:13

标签: mysql ruby-on-rails ruby

我们已收到报告请求,并且我正在尝试找出最简单,最有效的方法来提取数字。

我有一个 Deal 模型,它有两个属性:_quantity_purchased_和 price 。我被要求检索数据库中前100名最畅销的交易列表。为了了解交易的完成情况,我们将quantity_purchased乘以价格。

现在,我确信我可以编写一些令人费解的内容来获得我的结果,但这似乎是一个简单的操作,必须有一种更简单的方法。我可以在MySQL或Ruby / Rails中做些什么吗?或者我发现某种不愉快的循环?

仅供参考,我们正在运行Rails 2.3。

2 个答案:

答案 0 :(得分:10)

您可以将:limit参数传递给find方法,以限制返回的结果数量。结合:order参数,您可以获得“最高”的100个结果:

Deal.find(:all, :order => 'quantity_purchased * price', :limit => 100);

从Rails 3开始注意,编写此查询的正确方法是

Deal.order('quantity_purchased * price').limit(100)

答案 1 :(得分:1)

class Deal < ActiveRecord::Base
  named_scope :top_deals, :select => 'quantity_purchased * price', :order => '1 DESC', :limit => 100
end

应该这样做。在MySQL中,您可以使用“ORDER BY 1”按选择列表中的第一列进行排序,依此类推。