我有一个模型PurchaseHistory
。它有一列user_id
,另一列是amount
。当任何用户购买任何东西时,它会存储购买的user_id
和amount
。
user_id amount
1 10
2 20
1 20
现在,我想根据group
和user_id
的{{1}}进行查询order
。
因此,在这种情况下,查询应该返回类似这样的内容
amount
答案 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
]