You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套双Select统计SQL转换为Laravel查询构造器正确写法

错误原因

  • 原始代码中from方法内的子查询没有调用DB门面,属于语法错误
  • 派生表(子查询返回的结果集)必须指定别名,不符合基础SQL语法规范

正确实现代码

写法1(Laravel原生闭包子查询,官方推荐)

完全匹配你给出的原生SQL逻辑:

$data = DB::selectRaw('keterangan_warga, count(keterangan_warga) as JumlahWarga')
    ->from(function ($query) {
        // 内层去重逻辑
        $query->select('nokk_warga', 'keterangan_warga')
            ->distinct()
            ->from('warga');
    }, 't') // 给派生表设置别名t,和原生SQL的`as t`对应
    ->groupBy('keterangan_warga')
    ->get();

写法2(显式构建子查询传入)

适合需要复用子查询的场景:

// 先构建内层去重子查询
$subQuery = DB::table('warga')
    ->select('nokk_warga', 'keterangan_warga')
    ->distinct();

// 外层做分组统计
$data = DB::table(DB::raw("({$subQuery->toSql()}) as t"))
    ->mergeBindings($subQuery) // 合并子查询的参数绑定,避免SQL注入风险
    ->selectRaw('keterangan_warga, count(keterangan_warga) as JumlahWarga')
    ->groupBy('keterangan_warga')
    ->get();

内容的提问来源于stack exchange,提问作者Shabrina Nurdiani S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:18:03