次のコード行があります。
@ranking_array = User.joins(:bets, :choices).select("users.id, sum(bets.profitloss + choices.profitloss) as total_pl").group("users.id").order("total_pl DESC").map(&:id)
これにより、ユーザーのランキングがわかります。たとえば、ユーザーXは25位です。
しかし、問題は、ユーザーが何も選択しなかった場合、結果にそのユーザーが含まれないことです。
それで、コードを修正する方法、それで、どちらかの選択の賭けがゼロであるとしても、それは利益の損失に合計されます。
解決:
ええと..それを機能させるために私はあなたの2つの答えを組み合わせる必要があったようです:)
LEFT JOIN
私はwithが必要だったCOALESCE
ので、動作するように見える次のコードを取得しました。
@ranking_array = User.find(:all,
:joins => "LEFT JOIN `bets` ON bets.user_id = users.id LEFT JOIN `choices`ON choices.user_id = users.id",
:select => "users.id, sum(COALESCE(bets.profitloss, 0) + COALESCE(choices.profitloss, 0)) as total_pl",
:group => "users.id",
:order => "total_pl DESC").map(&:id)
どうもありがとうございました..私はこれを解決するために一日中努力してきました..
問題は、誰が答えを得るのかということです。それは2つの組み合わせですか。