【发布时间】:2018-04-18 05:38:57
【问题描述】:
我有两张桌子winners 和check_winners。
获奖者:
id check_winner_id username win_number .... 1 1 xxx 1 2 2 xxx 1 3 3 yyy 1 4 4 yyy 1
check_winners:
id user_id chance_of_win.... 1 1 1 2 1 1 3 2 1 4 2 1 5 2 1 6 2 1 7 2 1 8 2 1
现在我想join 两个表,并希望通过username 对chance_of_win 列和win_number 列组求和。我尝试了一种方法,但它没有给出win_number 的总和的确切结果。我怎样才能做到这一点?
$winners = DB::table('winners')
->groupBy('winners.username')
->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
->selectRaw('*, sum(check_winners.chance_of_win) as chance_sum, sum(winners.win_number) as win_sum')
dd($winners);
这样我得到输出:
array:2 [▼
0 => {#241 ▼
+"id": 1
+"check_winner_id": 1
+"username": "xxx"
+"chance_sum": "2"
+"win_sum": "2"
}
1 => {#242 ▼
+"id": 2
+"check_winner_id": 2
+"username": "yyy"
+"chance_sum": "6"
+"win_sum": "6"
}
]
但是对于array,win_sum 应该是 2。我哪里做错了?提前致谢。
【问题讨论】:
-
尝试使用 distinct('winners.username') 而不是 groupBy(''winners.username')
-
如果我使用
distinct('winners.username'),那么我会得到一个带有win_sum 10和chance_sum 2的数组 -
我已经添加了我的答案,请检查它的工作与否
-
@AddWebSolutionPvtLtd 和我得到的解决方案,首先是
array,其值为chance_sum和win_sum,两者均为8。第二个arraychance_sum null和win_sum 2。 -
@ChoncholMahmud 看到您的“xxx”用户名属于两个 user_id 1,2 根据您的 leftjoin,当您分组时,您的获胜者表 id 2 将被跳过