现在有一张 exam_result 表,表里有 user_id,score 字段,想要根据 score 进行排序,根据 page,per_page 返回用户以及排名,分数相同则排名相同(谁先谁后可以根据默认 id 排序,但是排名需要一样),我该怎么做?
现在的想法是使用 select as 的方法,比如
Exam.order(score: :desc)
.select('exams.*', (select count(*) from exams where score > ?) as rank')
.page(page).per(per_page).map{|e| [e.user_id, e.score]}
问题是,应该 count 出 limit offset 之内的所有用户排名,我不知道?处该填什么,或者这种做法对不对也是值得思考的
最终的目的是,相同分数用户排名并列,比如排行需要 [1, 1, 2, 2, 2, 6, 7, 7, 9] 这样的数据