Sql rails—如何指定给定数量的在给定联接查询中返回的顶级唯一结果

Sql rails—如何指定给定数量的在给定联接查询中返回的顶级唯一结果,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我正试图通过一个查询,根据前20名“会员”的个人“报告分数”排名前20名。问题是,如果排名靠前的成员的第二个最佳报告分数也在前20名,那么查询只返回19个成员 top_members = Member.all(:joins=>[:reports], :conditions => ["score > 0"],:order => ["score DESC"],:limit => 20).uniq 我需要做什么才能让查询继续进行,直到我有20个

我正试图通过一个查询,根据前20名“会员”的个人“报告分数”排名前20名。问题是,如果排名靠前的成员的第二个最佳报告分数也在前20名,那么查询只返回19个成员

top_members  = Member.all(:joins=>[:reports],  :conditions => ["score > 0"],:order      => ["score DESC"],:limit      => 20).uniq 
我需要做什么才能让查询继续进行,直到我有20个成员


谢谢

我认为您必须分两个阶段进行:

1)
id\u list=Member.all(:select=>'distinct id',:conditions=>[“score>0”],:order=>[“score DESC”],:limit=>20


2)
top\u members=Member.find(id\u list,:joins=>[:reports])
此时您正在从数据库中获取20个结果,然后在调用
uniq()时丢弃重复的结果。相反,您可以从数据库中选择不同的结果,例如:

top_members = Member.all(:joins=>[:reports], 
  :conditions => ["score > 0"],
  :order => ["score DESC"], 
  :limit => 20, 
  :select => 'DISTINCT members.*').uniq 

嗨,克里斯。我开始使用这种方法——我很确定它会起作用,但我更希望找到一个一步解决方案。谢谢