我希望得到每个科目中前三名学生的名字。
对于前1名,我的查询有效
Result.group('subject').having('marks = MAX(marks)')
但如何获得前三名?
答案 0 :(得分:2)
您需要order
desc
marks
和limit
至{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")