我有一个users
包含列country
和用户belongsToMany
Categories 的表。用户还hasMany
与Payments表有关系。
我在尝试着:
按国家/地区对用户进行分组,显示每个国家/地区最受欢迎的类别(这已经解决)
对每个分组国家/地区的表amount
中的列求和payments
每次我尝试加入payments
表格时,它都会返回多个结果,这使得总和完全错误。我相信我没有使用正确的查询。
以下是表结构:
用户
id | name | country
1 | UserA | Canada
2 | UserB | USA
3 | UserC | Canada
类别
id | Name
1 | Housing
2 | Cooking
类别_用户
id | category_id | user_id
1 | 1 | 1
2 | 2 | 2
3 | 1 | 3
付款
id | amount | user_id
1 | 500 | 1
2 | 200 | 2
3 | 150 | 1
4 | 100 | 3
第一个问题已使用以下代码解决:
return User::leftJoin('category_user as cu', 'users.id', '=', 'cu.user_id')
->join('categories as c', 'cu.category_id', '=', 'c.id')
->groupBy(['country', 'c.name'])
->get([
'users.country',
'c.name',
DB::raw('count(*) as total')
])
->groupBy('country')
->values()
->map(function (Collection $elt) {
return $elt->sortByDesc('total')->first();
});
结果是这样的:
[
{
"country": "Canada",
"name": "Housing",
"total": 2
},
{
"country": "USA",
"name": "Cooking",
"total": 1
}
]
我想从付款中获得 SUM(amount) 作为 total_payments。任何帮助,将不胜感激。
谢谢。
繁星淼淼