在多个条件下按升序检索记录

时间:2015-10-06 03:36:55

标签: ruby ruby-on-rails-3

我需要从我的表中获取最大的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]    

2 个答案:

答案 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)