我有2个型号,用户和购买。
User has_many :purchases
和Purchase belongs_to :user
购买字段是:
id, product_id, user_id, amount, created_at
我想要实现的是方法调用,例如:
User.top_five
将返回具有最高购买价值的5个用户,即每个用户的purchases.amount字段的总和。
我还希望能够执行User.top_five(:start_date=>'01/01/2010',:end_date=>'31/12/2010')
之类的操作,即选择一个时间段来计算前五个用户。
所以我一直试图获得连接,总和,order_bys等的正确组合,但我只是没有得到它。所以希望有人可以指出我正确的方向! 希望我在这里给出足够的信息,这是我的第一个问题。
感谢
答案 0 :(得分:3)
我建议像
def self.top_five(start_date, end_date)
User.all(:select => "users.*, SUM(purchased.amount) as purchased_sum",
:joins => "LEFT JOIN purchases AS purchased ON purchased.user_id = users.id",
:group => "users.id",
:conditions => ["purchased.created_at BETWEEN ? AND ?", start_date, end_date],
:order => "purchased_sum DESC",
:limit => 5)
end