Rails查询:按一列分组,按另一列的总和排序

时间:2016-06-07 14:02:23

标签: ruby-on-rails activerecord

我有一个模型PurchaseHistory。它有一列user_id,另一列是amount。当任何用户购买任何东西时,它会存储购买的user_idamount

user_id  amount
1        10
2        20
1        20

现在,我想根据groupuser_id的{​​{1}}进行查询order

因此,在这种情况下,查询应该返回类似这样的内容

amount

2 个答案:

答案 0 :(得分:2)

我认为它应该有用,

PurchaseHistory.group(:user_id).order("sum_amount DESC").sum(:amount)

答案 1 :(得分:1)

这应该有效 (如果是PostgreSQL DB,如果有任何nils,请使用coalesce(amount, 0),否则使用相应的db方法将nil转换为0)

Hash[
  PurchaseHistory.select("user_id, SUM(coalesce(amount, 0)) as amount_sum").group(:user_id).order("amount_sum DESC").map do |row| 
    [row.user_id, row.amount_sum]
  end
]