0

次の構造の「提案」テーブルがあります。

id(suggest_id) | author_id | accepted(true/false)

たとえば、最大の受け入れ率で注文したい:

Jack had 10 suggests and he accepted 5 (50% acceptance rate)
John had 20 suggests and he accepted 5 (25% acceptance rate)
Steve had 10 suggests and he accepted 8 (80% acceptance rate)

これが返されます: スティーブ、ジャック、ジョン。

おそらく、2 つの SQL クエリを使用する必要があると思います。1 つは提案数用、もう 1 つはaccepted=true.

多分それは1つのクエリで行うことができますか?

私はレールを使用しているので、レールでも実行できます。

4

2 に答える 2

3

受け入れられた(真/偽)の表現方法に応じて...

select author_id, 
    sum(case when accepted ='true' then 1 else 0 end), 
    100.0*sum(case when accepted ='true' then 1 else 0  end)/count(*)
from yourtable
group by author_id
order by 100.0*sum(case when accepted ='true' then 1 else 0 end)/count(*) desc
于 2012-10-09T09:52:01.420 に答える
0

プレーンルビーを使用することもできます。

@authors_by_acceptance_rate = Array.new
@authors = Author.all
@authors.each do |author|
  @suggests = Suggest.find_by_author_id(author.id)
      accepted = 0
  @suggests.each do |suggest|
    if suggest.accepted
      accepted = accepted + 1
    end
  end
  acceptance_rate = accepted/@suggests.count
  @authors_by_acceptance_rate.push('name' => @author.name, 'accepted' =>     acceptance_rate)   
end
return @authors_by_acceptance_rate

私はこれをテストしていないので、それが機能するという保証はありません...

于 2012-10-10T17:40:31.220 に答える