如何合并sales_products表同产品行得到统计结果?Laravel多表查询问题
问题原因
当前的查询语句仅返回单条销售记录的明细数据,未添加分组聚合逻辑,因此无法实现按产品维度汇总的需求。
修改后的查询代码
$invoiceDetails = DB::table('products') ->join('sales_products', 'sales_products.product_id', '=', 'products.id') ->select( 'products.product_name', DB::raw('SUM(sales_products.quantity) as total_quantity'), DB::raw('SUM(sales_products.quantity * sales_products.sales_price) as total_sales') ) ->where('sales_products.invoice_id', '=', $id) ->groupBy('products.id', 'products.product_name') ->get();
关键修改说明
- 移除了明细字段
sales_products.quantity、sales_products.sales_price的查询,替换为聚合计算逻辑:- 用
SUM(sales_products.quantity)统计单产品的总销量 - 用
SUM(sales_products.quantity * sales_products.sales_price)统计单产品的总销售额
- 用
- 新增
groupBy分组规则,按产品ID和产品名称分组,保证同一产品的所有销售记录聚合为一条结果 - 同时添加
products.id到分组字段是为了兼容数据库ONLY_FULL_GROUP_BY模式的校验,避免语法报错
返回结果说明
查询返回的每条结果对应一个产品的汇总数据,你可以通过total_quantity获取总销量,total_sales获取总销售额,完全匹配你需要的输出要求。
内容的提问来源于stack exchange,提问作者Hola
相关产品推荐
相关产品推荐

