【问题标题】:Help with sorting records in Ruby on Rails帮助在 Ruby on Rails 中对记录进行排序
【发布时间】:2010-12-22 22:23:26
【问题描述】:

我有一个包含两列的分数表:user_idscore

user_id    分数
1               200
1               120
1               230
2               300
2               345
3               100
3               40
4               350
4               500
......

Score.order('score DESC').limit(3) 列出前 3 个分数。相反,我将如何获得前 3 名,其中每个用户仅在列表中获得一个位置(他们的最高分)。

上表中的高分是:

user_id:4 得分:500
user_id:2 得分:345
user_id: 1 得分: 230

谢谢!

提姆

【问题讨论】:

    标签: sql ruby-on-rails ruby ruby-on-rails-3


    【解决方案1】:

    您应该能够对查询进行分组:

    Score.order('score DESC').group('user_id').limit(3)
    

    【讨论】:

      【解决方案2】:
      Score.all(:order => 'score DESC', :limit => 3, :group => :user_id)
      

      使用新的 Arel:

      Score.group(:user_id).order('score DESC').limit(3)
      

      【讨论】:

      • 全部采用老式 Rails 2 风格!
      • 是的,我之前手头没有 arel。我正要编辑它:Score.group(:user_id).order('score DESC').limit(3)
      • 问题:先叫group还是先叫order有关系吗?
      • @zabba:一点也不,任何链都会生成完全相同的 SQL。因此,只需订购它以最适合您的查询推理即可。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 1970-01-01
      相关资源
      最近更新 更多