原生SQL在phpMyAdmin运行正常,转换为QueryBuilder时distinct使用出错求助
解决方法
你当前编写的查询构造器代码和原生SQL的差异是缺少了sales.amount求和时的distinct逻辑,直接在DB::raw中补充该关键字即可,修正后代码如下:
$results = DB::table('users') ->select( 'users.id', 'users.email', DB::raw('SUM(users.ca) as total_ca'), DB::raw('SUM(DISTINCT sales.amount) as total_distinct_sales_amount') ) ->join('sales', 'users.id', '=', 'sales.user_id') ->groupBy('users.id', 'users.email') ->get();
补充说明
- 给聚合计算结果添加别名,后续从返回结果中取值会更方便
- 如果你的MySQL开启了严格模式,
GROUP BY子句需要包含所有非聚合类型的查询字段,因此上述代码把users.email也加入了分组条件,避免执行时报错,和你原生SQL的执行逻辑完全一致。
内容的提问来源于stack exchange,提问作者Deby
相关产品推荐
相关产品推荐

