Sql rails—如何指定给定数量的在给定联接查询中返回的顶级唯一结果
我正试图通过一个查询,根据前20名“会员”的个人“报告分数”排名前20名。问题是,如果排名靠前的成员的第二个最佳报告分数也在前20名,那么查询只返回19个成员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个
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
嗨,克里斯。我开始使用这种方法——我很确定它会起作用,但我更希望找到一个一步解决方案。谢谢