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

SQL中如何实现符合指定条件的SUMIF求和操作?

SQL实现方案

分三种常见需求场景,可根据你的实际需要选择:

场景1:仅输出每个ID对应区间内的Value求和结果(聚合输出)

不需要保留原表行,仅拿聚合结果时用普通GROUP BY即可:

SELECT 
  ID,
  SUM(Value) AS sum_value_in_range
FROM 你的表名
WHERE Date > 'X' -- 替换为实际区间下界
  AND Date < 'Y' -- 替换为实际区间上界
GROUP BY ID;

如果需要同时输出同一个ID的区间内、区间外求和结果,用CASE WHEN做条件分支:

SELECT 
  ID,
  SUM(CASE WHEN Date > 'X' AND Date < 'Y' THEN Value ELSE 0 END) AS sum_value_in_range,
  SUM(CASE WHEN Date <= 'X' OR Date >= 'Y' THEN Value ELSE 0 END) AS sum_value_out_range
FROM 你的表名
GROUP BY ID;

场景2:保留原表所有行,每行带当前ID对应区间内的求和值

这是最常用的窗口函数实现场景,把区间判断放到SUM的内部处理即可:

SELECT 
  *,
  SUM(CASE WHEN Date > 'X' AND Date < 'Y' THEN Value ELSE 0 END) OVER (PARTITION BY ID) AS sum_value_in_range
FROM 你的表名;

如果你使用的是支持FILTER子句的数据库(PostgreSQL、BigQuery等),可以用更简洁的写法:

SELECT 
  *,
  SUM(Value) FILTER (WHERE Date > 'X' AND Date < 'Y') OVER (PARTITION BY ID) AS sum_value_in_range
FROM 你的表名;

场景3:和你提供的伪代码语义完全一致的实现

如果需要将同一个ID的行按是否落在区间分为两组,组内分别求和(即区间内行显示区间内总和、区间外行显示区间外总和),可以直接把布尔判断作为分区字段:

SELECT
  *,
  SUM(Value) OVER (PARTITION BY ID, (Date > 'X' AND Date < 'Y')) AS group_sum
FROM 你的表名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:09:02