首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多条件升序取数

多条件升序取数
EN

Stack Overflow用户
提问于 2015-10-06 11:36:55
回答 2查看 55关注 0票数 0

我需要从我的表中获取3个金额字段中最大的一个。但是在名为expense_amt and income_amt的事务表中有两个金额字段。我需要得到3个最大的金额字段通过查看这两个领域。我知道我可以使用多个字段进行查询,比如

代码语言:javascript
复制
Model.order('expense_amt', 'income_amt').limit(3)

但这并没有像我预期的那样返回3个金额字段中的最大值。所以基本上我需要检索3个事务中最大的一个。这就像是

代码语言:javascript
复制
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]    
EN

回答 2

Stack Overflow用户

发布于 2015-10-06 15:03:36

这不是最好的解决方案,但也许您可以从这里入手:)

如果这两个值不一致,则和将始终是最高值。使用COALESCE SQL函数,我们用0替换NULL以使计算工作。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-10-06 12:04:08

我已经编辑了这个解决方案

代码语言:javascript
复制
    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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32961299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档