我有以下代码行:
@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 位,依此类推。
但问题是,如果用户没有对任何选择下注,结果将不包括该用户。
那么如何修复代码,即使选择的任何一个赌注都是零,它也会总结利润损失。
解决方案:
好吧..看来我必须结合你的两个答案才能使它起作用:)
我需要LEFT JOIN
withCOALESCE
所以我得到了以下似乎有效的代码..
@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)
非常感谢..我已经用了一整天的时间来解决这个问题..
问题是现在谁得到答案是两者的结合?