本文介绍如何使用 laravel 的 query builder 对多表关联数据进行分组求和,解决因缺少 group by 导致重复行、无法汇总的问题,并给出正确实现与关键注意事项。
在实际开发中,常需基于主表(如 products)和关联表(如 ins 入库记录)统计每个商品的累计数量。你当前的查询虽然完成了表连接,但未进行分组(GROUP BY)和聚合(SUM()),导致每条入库记录单独返回一行,且 SUM() 在无分组时会对全表求和

✅ 正确做法是:显式分组 + 聚合 + 选择非聚合字段需兼容 SQL 标准。以下是修正后的 Laravel 查询代码:
public function index()
{
$productsWithTotal = DB::table('products')
->join('ins', 'products.id', '=', 'ins.products_id')
->select('products.name', DB::raw('SUM(ins.amount) as total_amount'))
->groupBy('products.id', 'products.name') // ✅ 必须按主键和 SELECT 中的非聚合字段分组
->get();
return response()->json($productsWithTotal);
}? 关键说明:
⚠️ 注意事项:
最终输出示例:
[
{"name": "Aerobat", "total_amount": 124},
{"name": "god of war", "total_amount": 30},
{"name": "Rs537", "total_amount": 15}
]这一结构清晰、可直接用于前端展示或进一步业务处理。