我想在 laravel 中的 select DB::raw 中创建 where 子句

I want to make where clause inside to select DB::raw in laravel

我有两个表 biodata_wnidemographics,我想统计 biodata_wni 中的列 akta_kwn 的值为 1 的数据以及 [=17] 的计数=] 在 biodata_wni 中是 2.

有人会遇到这样的情况吗?

$smstr= $request->semester;  
$kec= $request->kecamatan;

$aktakawin= DB::table('biodata_wnis')
        ->join('demographics', 'biodata_wnis.nik','=','demographics.nik')
        ->where('demographics.nama_kec','=',$kec)
        ->where('biodata_wnis.semester','=',$smstr)
        ->select(
            DB::raw("count(biodata_wnis.akta_kwn) WHERE biodata_wnis.akta_kwn = 1 as jml_lk"),
            DB::raw("count(biodata_wnis.akta_kwn) WHERE biodata_wnis.akta_kwn = 2 as jml_pr")
            , 'demographics.nama_kel')
        ->groupBy('demographics.nama_kel as name')
        ->get();

我想得到这样的结果:

Illuminate\Support\Collection {#1321 ▼
  #items: array:5 [▶
    0 => {#1329 ▶
      +"jml_lk": 21
      +"jml_pr": 1
      +"name": "CARANGSARI"
    }
    1 => {#1323 ▶
     +"jml_lk": 21
     +"jml_pr": 1
     +"name": "CESTSA"
    }

问题出在 SQL 语法上,没有 SQL 语法将 WHERE 应用于 COUNT

您可以做的是:

    ->select(
        DB::raw("sum(biodata_wnis.akta_kwn = 1) as jml_lk"),
        DB::raw("sum(biodata_wnis.akta_kwn = 2) as jml_pr")

biodata_wnis.akta_kwn = 1 是一个 0 或 1 表达式,取决于它是否为真。 sum将它们加起来计算该特定项目的数量。