我有两个表,一个叫companies
,另一个叫leads
。我想使用Laravel的口才,为每个公司获取潜在客户的数量。这很简单,但我还需要按Leads状态对它们进行分组。
例如
A公司有
3 hot leads
2 cold leads
乙公司有
6 cold leads
0 hot leads
Companies
表具有以下结构:
id
name
Leads
表具有以下结构
id
company_id
status (hot, cold)
我尝试了以下方法,该方法可以获取每家公司的潜在客户数量,但这需要根据潜在客户的状态进行进一步分组
DB::table('companies')
->selectRaw('companies.id, companies.name, COUNT(*) as count')
->join('leads', 'leads.company_id', '=', 'companies.id')
->groupBy('id')
->get();
答案 0 :(得分:1)
在使用count
之类的汇总时,您需要确保按所有选定的非汇总列进行分组。
MySQL通常会让您不去做,但是查询结果可能会变得毫无意义。
$companies = DB::table('companies')
->select(['companies.name', 'leads.status', \DB::raw('COUNT(*) as count')])
->join('leads', 'leads.company_id', '=', 'companies.id')
->groupBy('companies.name', 'leads.status')
->get();
如果公司表中有多个具有相同名称(但ID不同)的记录,则将每个重复的公司名称的所有计数分组在一起。如果是这种情况,还应该选择companies.id
并按其分组。
如果您想按公司,然后按状态键入,则应该可以进行以下操作...
$companies = $companies->groupBy('name')->map(function ($company) {
return $company->groupBy('status')->map(function ($company) {
return $company->first()['count'];
});
});
然后您可以像...一样使用它
echo $companies['testCompanyName']['hot'];
echo $companies['testCompanyName']['cold'];