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

SQL实现SUMIF/CASE WHEN按行值条件分组求和 匹配Excel SUMIFS效果

错误原因分析

你原代码的问题出在CASE WHEN B>=B的判断逻辑:这里左右两侧的B都是取当前行的B字段值,条件永远为真,最终SUM返回的是整个A分组所有C值的总和,不符合要求的筛选逻辑。

正确SQL写法

写法1:窗口函数(性能最优,推荐主流SQL引擎使用)

利用窗口函数的排序+帧范围定义实现需求:

SELECT 
    A,
    B,
    C,
    SUM(C) OVER(
        PARTITION BY A 
        ORDER BY B DESC 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS Output
FROM 你的表名

逻辑说明:

  • 按A列分组
  • 分组内按B值降序排序
  • 从分组第一行到当前行累计求和C值,正好对应「分组内所有B≥当前行B的C值之和」的需求
    Hive、Spark SQL、PostgreSQL等主流引擎省略帧定义时,ORDER BY后的默认帧规则也匹配需求,可简写为:
SUM(C) OVER(PARTITION BY A ORDER BY B DESC) AS Output

写法2:相关子查询(兼容所有SQL版本)

如果你的数据库不支持窗口函数,可以用相关子查询实现:

SELECT 
    t1.A,
    t1.B,
    t1.C,
    (SELECT SUM(t2.C) FROM 你的表名 t2 WHERE t2.A = t1.A AND t2.B >= t1.B) AS Output
FROM 你的表名 t1

验证结果

两种写法对测试输入的返回结果和预期完全一致:

ABCOutput
1113
1212
1311
2101
2211
2300

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:15:02