提问者:小点点

使用groupBy和where进行数据计数


我要冒险了,我想说,我认为这将需要某种形式的加入,但这是我的问题。

我有一个数据集,它当前正在按期间分组,然后检索这些期间中项目总数的计数。

P1-5,P2-3,P3-9等。

我在我想应用的同一数据集中有一个过滤器,但是,这个过滤器通过空的信息(显然数据不存在)过滤掉任何组,但是我仍然想把它算作0。

数据集2示例:

P1-6,P2-0,P3-6

这是group by当前的工作代码,用于在没有0个大小组的情况下获取计数:

Model::select('period',DB::raw('count(*) as amount'))
    ->groupBy('period')
    ->get();

我想补充这样一点:

->where('form', 'someformid')

我的猜测是需要->leftjoin('samemodelname',id=id),但我不确定。

如果比较容易的话,我可以转换SQL答案


共1个答案

匿名用户

您可以应用左联接并将where子句移动到该联接中

\App\Model::select(['period',DB::raw("count(*) as amount")])
    ->leftJoin(DB::raw("table2 as t2"), function ($join)  {
        $join->on('t2.id', '=', 'model.id');
        $join->on(function ( $query ){
            $query->whereNull('t2.id'); //this will make sure we also count the zero result of left join
            $query->orWhere('t2.form',someformid');
        });

    })
    ->groupBy('period')
    ->get();

像这样的。 Rest您可以共享SQL查询