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

Laravel 9:单查询内带条件的SUM与COUNT聚合函数使用问题

问题出在这几个地方
  1. 聚合函数里不能直接写WHERE,这不符合SQL语法规范
  2. 你之前写的SUM(amount AND type = "dispute"),本质是把符合条件的记录转成1、不符合的转成0,求和后得到的是记录数而非金额总和
  3. 你的DB::raw代码中,各个字段之间缺少逗号,这会直接导致SQL语法错误
修正后的代码
$query = DB::table('cash_table')
        ->where('transaction_created', '>=', Carbon::now()->startOfWeek())
        ->select(DB::raw('
            SUM(amount) as transaction_amount,
            COUNT(amount) as transaction_count,
            SUM(CASE WHEN type = "dispute" THEN amount ELSE 0 END) as charge_amount,
            COUNT(CASE WHEN type = "dispute" THEN amount END) as charge_count,
            SUM(CASE WHEN type = "loan" THEN loan_amount ELSE 0 END) as loan_amount,
            COUNT(CASE WHEN type = "loan" THEN loan_amount END) as loan_count
        '))
        ->groupBy('transaction_created')
        ->get();
逻辑说明
  • 带条件的SUM:通过CASE WHEN判断类型,符合条件时取对应金额,不符合时取0,这样SUM就能得到目标类型的金额总和
  • 带条件的COUNT:CASE WHEN仅在符合条件时返回字段值,不符合时返回NULL,而COUNT()会自动忽略NULL值,因此能精准统计目标类型的记录数;也可以用SUM(CASE WHEN type = "dispute" THEN 1 ELSE 0 END)实现同样效果
  • 务必保证每个字段之间用逗号分隔,这是SQL的基础语法要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:52:28