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

Laravel中按Nama Lengkap分组统计Jumlah Hadir等考勤数据的方法

解决方案

你当前的查询问题在于子查询没有关联到具体用户,所以返回的是全表的"Hadir"总数,而非每个用户的统计。要实现按用户分组并统计三种状态的数量,可以用条件聚合函数结合groupBy来完成,具体代码如下:

$data = Absence::with('teacher', 'data_mapel', 'data_kelas', 'data_siswa', 'data_tahun_ajaran', 'data_unit')
    ->select(
        'data_siswa.nama_lengkap',
        DB::raw('COUNT(CASE WHEN absensi = "Hadir" THEN 1 END) as jumlah_hadir'),
        DB::raw('COUNT(CASE WHEN absensi = "Sakit" THEN 1 END) as jumlah_sakit'),
        DB::raw('COUNT(CASE WHEN absensi = "Izin" THEN 1 END) as jumlah_izin')
    )
    ->join('data_siswa', 'absensi_siswa.siswa_id', '=', 'data_siswa.id')
    ->groupBy('data_siswa.id', 'data_siswa.nama_lengkap')
    ->get();

关键说明:

  • 用CASE WHEN在聚合时筛选对应状态的记录,COUNT会自动忽略NULL值(不满足条件的CASE返回NULL),从而得到每个状态的数量。
  • 分组时同时用data_siswa.id和nama_lengkap,避免出现同名用户被合并的情况(如果业务中允许同名,仅按nama_lengkap分组即可)。
  • 通过join关联data_siswa表,确保能获取到用户的nama_lengkap并以此分组。

如果你的Absence模型对应的表名不是absensi_siswa,请将join语句中的表名替换为实际表名;关联字段(如siswa_id)也请根据你的数据表结构调整。

内容的提问来源于stack exchange,提问作者Muhammad Robi Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:01:23