我需要从我的表中获取最大的3个金额字段。但是在Transaction表中有2个名为expense_amt and income_amt
的金额字段。我需要通过查看两个字段来获得最大的3个金额字段。我知道我可以查询多个字段,如
Model.order('expense_amt', 'income_amt').limit(3)
但是这并没有像我预期的那样返回3个数量字段中的最大字段。所以基本上我需要检索最大的3个交易。 就像
Transactions
id expense_amt income_amt transaction_type
1 100 NULL 1
2 200 NULL 3
3 NULL 400 1
4 NULL 800 2
5 1000 NULL 1
So the output of largest 3 would be [1000, 800, 400]
答案 0 :(得分:1)
这不是最漂亮的解决方案,但也许你可以从这里去某处:)
如果值不一致,则总和将始终为最高值。使用COALESCE
SQL函数,我们将NULL
替换为0
,以使计算有效。
Model.select("(COALESCE(expense_amt, 0) + COALESCE(income_amt, 0)) AS combined_amt").
order("combined_amt DESC").
limit(3).
map{|row| row["combined_amt"]}
答案 1 :(得分:0)
我已编辑此解决方案
expense= Model.order('expense_amt DESC').limit(3).map{|exp| exp.expense_amt}
income = Model.order('income_amt DESC').limit(3).map{|inc| inc.income_amt}
result= expense +income
result.sort{|a,b| b <=> a}.first(3)