后,我有以下的数据库组:Ruby on Rails的 - 按订单
ID | User | Item | Score | Time |
1 | 1 | 1 | 10 | 5 |
2 | 1 | 1 | 9 | 95 |
3 | 1 | 1 | 50 | 30 |
4 | 1 | 1 | 5 | 10 |
我想要得到的最高分然后最低的时间和GROUP_BY用户。 总之我只想:
3 | 1 | 1 | 50 | 30 |
我设法拿到订单做做:
order(score: :desc, time: :asc)
ID | User | Item | Score | Time |
3 | 1 | 1 | 50 | 30 |
1 | 1 | 1 | 10 | 5 |
2 | 1 | 1 | 9 | 95 |
4 | 1 | 1 | 5 | 10 |
但是当我添加GROUP_BY它没有显示我的第一道防线。
这里是真正的数据:
irb(main):029:0* Game.all.each { |g| p g.attributes }
Game Load (0.0ms) SELECT "games".* FROM "games"
{"id"=>18, "gift_id"=>13, "user_id"=>1, "time"=>0.04, "score"=>3}
{"id"=>19, "gift_id"=>13, "user_id"=>1, "time"=>5.0, "score"=>8}
{"id"=>20, "gift_id"=>13, "user_id"=>1, "time"=>50.0, "score"=>55}
{"id"=>21, "gift_id"=>13, "user_id"=>1, "time"=>56.0, "score"=>33}
{"id"=>22, "gift_id"=>13, "user_id"=>1, "time"=>9.0, "score"=>23}
{"id"=>23, "gift_id"=>13, "user_id"=>1, "time"=>12.0, "score"=>21}
{"id"=>24, "gift_id"=>13, "user_id"=>1, "time"=>51.0, "score"=>55}
我要的结果是id 20,因为它有最好的得分(55)和ID 20和24
之间的最短时间irb(main):035:0* Game.group('user_id').having("max(score) = score and min(time) = time")
Game Load (0.0ms) SELECT "games".* FROM "games" GROUP BY user_id HAVING max(score) = score and min(time) = time
=> #<ActiveRecord::Relation []>
编辑: 看来我解决我的概率LEM用这个命令:
Game.order("score DESC, time ASC").group(:user_id)
我不明白为什么我从来没有尝试过这一个或为什么它永远不会奏效之前...
什么是您的型号名称? – 2014-09-22 18:30:52
游戏。真正的命令是:'games.order(score::desc,time :: asc)' – 2014-09-22 18:34:15
@ZazOufUmI和group? – 2014-09-22 18:52:36