如何获得每个科目中三个最高分标记的学生姓名

时间:2016-02-25 09:22:51

标签: ruby-on-rails activerecord

我希望得到每个科目中前三名学生的名字。

对于前1名,我的查询有效

Result.group('subject').having('marks = MAX(marks)')

但如何获得前三名?

2 个答案:

答案 0 :(得分:2)

您需要order desc markslimit至{3}的记录,才能获得每个主题中的前三名学生。

Result.group('subject').order('marks desc').limit(3)

答案 1 :(得分:1)

有一个postgres窗口函数的解决方案:

subscope = Result.select("*, row_number() OVER (PARTITION BY subject ORDER BY marks DESC) AS pos"

Result.from(subscope).where("pos <= 3")