Laravel 5 Query Builder左连接求和结果为0.0问题排查
问题出在单引号上!
你写的SUM('points.amount')里,单引号把points.amount变成了字符串字面量,而不是数据库字段引用。MySQL会把这个字符串转成数字0,所以SUM的结果自然就是0.0啦。
修正后的代码
把单引号去掉(或者换成反引号,字段名无特殊字符时可省略),让数据库正确识别这是字段:
\DB::table('stars') ->leftJoin('points', 'stars.id', '=', 'points.star_id') ->select(\DB::raw("stars.*, SUM(points.amount) AS total_points")) ->groupBy('stars.id') ->get();
额外实用提示
- 如果
points.amount可能存在NULL值,建议用COALESCE把NULL转为0,避免SUM结果返回NULL:
\DB::raw("stars.*, COALESCE(SUM(points.amount), 0) AS total_points")
- 若使用MySQL 5.7+且开启了
ONLY_FULL_GROUP_BY模式,分组时最好明确列出所有非聚合字段(不过Laravel处理stars.*时通常能自动适配,出现报错再调整即可)。
内容的提问来源于stack exchange,提问作者eylay
相关产品推荐
相关产品推荐

