【问题标题】:Multiple Column SUM with Join table - Laravel 5.2带有连接表的多列 SUM - Laravel 5.2
【发布时间】:2018-04-18 05:38:57
【问题描述】:

我有两张桌子winnerscheck_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 两个表,并希望通过usernamechance_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"
  }
]

但是对于arraywin_sum 应该是 2。我哪里做错了?提前致谢。

【问题讨论】:

  • 尝试使用 distinct('winners.username') 而不是 groupBy(''winners.username')
  • 如果我使用distinct('winners.username'),那么我会得到一个带有win_sum 10chance_sum 2 的数组
  • 我已经添加了我的答案,请检查它的工作与否
  • @AddWebSolutionPvtLtd 和我得到的解决方案,首先是array,其值为chance_sumwin_sum,两者均为8。第二个arraychance_sum nullwin_sum 2
  • @ChoncholMahmud 看到您的“xxx”用户名属于两个 user_id 1,2 根据您的 leftjoin,当您分组时,您的获胜者表 id 2 将被跳过

标签: php laravel


【解决方案1】:

你应该试试这个:

$winners = DB::table('winners')
            ->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')
            ->groupBy('winners.username')       
dd($winners);

更新答案

$winners = DB::table('winners')
            ->select('*', DB::raw("SUM(check_winners.chance_of_win) as chance_sum"), DB::raw("SUM(winners.win_number) as win_sum"))
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->groupBy('winners.username')

【讨论】:

  • 有了这个解决方案,我得到了。第一个array,其值为chance_sumwin_sum,两者均为8。第二个arraychance_sum nullwin_sum 2
  • 同样的事情发生了。第二个数组 chance_sum 为空。
猜你喜欢
  • 2016-08-31
  • 2017-11-20
  • 1970-01-01
  • 2016-07-12
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
相关资源
最近更新 更多