Laravel如何实现带多条件的sum聚合查询 计算销售表总收益
方案1:将聚合逻辑直接写入SUM表达式通过sum()方法传入
这是最简洁的写法,直接给sum()方法传入DB::raw包裹的条件计算逻辑,返回结果直接是数值类型:
use Illuminate\Support\Facades\DB; // 直接返回计算完成的总收益数值 $total = Sale::sum(DB::raw( 'case when status = 1 then price * quantity when status = 2 then price * quantity * -1 else 0 end' ));
方案2:通过别名查询后取字段值
如果你习惯写完整的SELECT语句,可以用value()方法直接获取计算后的字段值,避免返回集合或模型实例:
use Illuminate\Support\Facades\DB; $total = Sale::select(DB::raw( 'SUM(case when status = 1 then price * quantity when status = 2 then price * quantity * -1 else 0 end) as total' ))->value('total');
原问题原因说明
你之前没有拿到数值结果,是因为单独调用select(DB::raw())后返回的是查询构造器实例,没有触发实际查询并取出计算结果。以上两种写法都会直接执行SQL并返回最终的数值类型的总收益结果。
内容的提问来源于stack exchange,提问作者Othmane
相关产品推荐
相关产品推荐

