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

按type列从expense_incomes表取数SQL报错 需单条SQL按日期分组统计收支汇总

核心问题解答

原CASE写法的合规性判断

  • 原写法存在两处本质逻辑缺陷,完全无法实现预期需求:
    • 功能错位:将用于生成分类标识的CASE语句错误塞入WHERE子句。WHERE的作用是过滤符合条件的数据行,不承担生成分类字段、参与聚合分组的功能
    • 维度缺失:原SQL仅以日期作为分组依据,没有将收支类型纳入分组规则,就算把CASE语句移到正确位置,也无法输出同一天下支出、收入的分开统计结果

语法报错的原因与修复方案

  • 报错触发根源:一是你将带别名的CASE表达式嵌套在WHERE的括号结构内,完全不符合MariaDB的语法解析规则;二是CASE语句的别名位置错误,AS Type需要写在END关键字的后续,不能嵌入CASE的结构内部。两处错误共同触发了1064语法报错
  • 可根据实际输出需求选择对应正确写法:
    1. 需求为「一行对应某天某类收支的汇总值」
      因为表中type字段本身已经存储了Expense/Income的标识,完全不需要写多余的CASE转换,直接按日期+type双维度分组即可:
      SELECT 
        SUM(amount) AS amount,
        CAST(date AS DATE) AS dateAdded,
        type AS Type
      FROM expense_incomes
      GROUP BY CAST(date AS DATE), type
      
    2. 需求为「一行对应某天的汇总,同行同时展示当天总支出、总收入两个值」
      使用条件聚合逻辑,将CASE放到SELECT的聚合函数内部,不需要放在WHERE子句中:
      SELECT
        CAST(date AS DATE) AS dateAdded,
        SUM(CASE WHEN type = 'Expense' THEN amount ELSE 0 END) AS total_expense,
        SUM(CASE WHEN type = 'Income' THEN amount ELSE 0 END) AS total_income
      FROM expense_incomes
      GROUP BY CAST(date AS DATE)
      
  • 对应Laravel中的调用写法直接把上面的SQL替换进DB::select()即可,不需要做额外修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 02:06:03