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

Laravel Eloquent查询:如何按rrpp分组统计estado=1的数据?

Laravel Eloquent 分组统计总数量及指定状态数据量

你的原查询写法存在SQL语法错误,selectRaw里不能直接拼接count(*) as estado, '=', 1这类不符合语法的内容。要实现按rrpp分组,同时统计每组总数据量和estado等于1的数据量,可以用以下两种正确方式:

方式一:使用selectRaw直接编写SQL片段

$array = Tickets::groupBy('rrpp')
    ->selectRaw('rrpp, count(*) as quantity, SUM(CASE WHEN estado = 1 THEN 1 ELSE 0 END) as estado_count')
    ->get();

方式二:结合DB::raw构建查询

use Illuminate\Support\Facades\DB;

$array = Tickets::groupBy('rrpp')
    ->select(
        'rrpp',
        DB::raw('count(*) as quantity'),
        DB::raw('COUNT(CASE WHEN estado = 1 THEN 1 END) as estado_count')
    )
    ->get();

代码说明

  • count(*) as quantity:统计每组的总数据条数。
  • SUM(CASE WHEN estado = 1 THEN 1 ELSE 0 END):通过CASE表达式判断每条记录的estado是否为1,满足则返回1,否则返回0,最后求和得到符合条件的数量。
  • COUNT(CASE WHEN estado = 1 THEN 1 END):COUNT函数会忽略NULL值,当estado不等于1时CASE返回NULL,因此只会统计满足条件的记录数,效果和SUM方式一致。

查询结果中,每个分组的quantity是总条数,estado_count是该分组内estado等于1的数据量。

内容的提问来源于stack exchange,提问作者jerex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:04