近期做经销商后台的数据,突然要做一个状态下的不同条件的数据统计,能想到是单独条件去查再做汇总,但是想到效率和技术问题,怎么一条语句直接查询出来相关数据,而且做总得数据汇总,查到了以下办法:
$data = Commission::query()
->whereIn('dealer_phone', $phoneData) //数据条件
->select( //在select里面做sum汇总,可以写case when的条件判断,一条一句解决问题
DB::raw('sum(commission_amount) AS sum'),
DB::raw('sum(case when settlement_status=1 then commission_amount else 0 end) AS start_sum'),
DB::raw('sum(case when settlement_status=2 then commission_amount else 0 end) AS end_sum')
)->get();
//数据结构重构,类型转换
$newData = [
'total' => intval($data[0]['sum'] ?? 0),
'unsettled' => intval($data[0]['start_sum'] ?? 0),
'settled' => intval($data[0]['end_sum'] ?? 0)
];
这样下来比较方便,看着也比较舒服,也可以单条件查一下,直接把查出来的数据想加也可以。
推荐