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

按分组使用CASE语句计算累计求和(running sum)SQL运行异常排查

你的SQL存在两个核心问题导致结果不符合预期:

  • 第一个SUM的窗口函数语法不完整:你在第一个OVER子句里写了rows关键字但没有指定窗口范围,属于不规范写法,不同数据库的兼容处理逻辑差异很大,可能会打乱窗口的计算范围。
  • 查询没有加全局排序规则:SQL查询默认不保证结果集的返回顺序,你现在看到的结果里id=1的三条记录按14:00、15:00、13:00的顺序排列,会误导你对累计结果的判断,实际按时间排序后,id=1的累计值0(13:00)→1(14:00)→1(15:00)是符合你当前写法的逻辑的。

如果你要实现的是「按id分组,按时间升序计算累计的满足条件总次数」,可以把SQL优化成更简洁的写法,避免多个窗口函数的冗余和语法问题:

select 
  id, 
  color, 
  time,  
  sum(
    case 
      when question = 1 then 1 
      when suggestion = 'True' then 1 
      when proposal = 'True' then 1 
      else 0 
    end
  ) OVER (PARTITION BY id ORDER BY time) as s
from `table`
order by id, time

如果你的数据存在同一id下多条记录time相同的情况,想要按行顺序逐行累计,可以在窗口函数的ORDER BY后面加上明确的窗口帧定义:

sum(...) OVER (PARTITION BY id ORDER BY time rows between unbounded preceding and current row) as s

运行修正后的查询,得到的有序结果如下:

id       color   time      s
1         blue    13:00    0           
1         pink    14:00    1         
1         red     15:00    1         
2         green   11:00    1          
2         orange  15:00    2        

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:57:02