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

如何筛选满足双区间SUM条件的国家?SQL查询求助

问题分析与解决方法

你之前的查询核心问题是分组维度错误:把year加入了GROUP BY,导致每个分组仅对应单个国家的单个年份,根本无法同时满足两个跨年份区间的条件。

正确的思路是仅按countries分组,通过条件聚合分别计算两个时间段的values总和,再用HAVING筛选符合要求的国家,CASE语句刚好能实现这个逻辑。

正确查询语句(CASE实现条件聚合)

SELECT countries
FROM diamonds_export_long
GROUP BY countries
HAVING 
  -- 计算2015-2018年的values总和,非该区间年份计为0
  SUM(CASE WHEN year BETWEEN '2015' AND '2018' THEN values ELSE 0 END) = 0
  AND
  -- 计算2019-2022年的values总和,非该区间年份计为0
  SUM(CASE WHEN year BETWEEN '2019' AND '2022' THEN values ELSE 0 END) > 1;

简化版查询(省略ELSE)

如果你的数据库支持(主流SQL数据库都兼容),可以省略CASE里的ELSE分支——不满足条件的行会返回NULL,SUM函数会自动忽略NULL值,效果和写ELSE 0一致:

SELECT countries
FROM diamonds_export_long
GROUP BY countries
HAVING 
  SUM(CASE WHEN year BETWEEN '2015' AND '2018' THEN values END) = 0
  AND
  SUM(CASE WHEN year BETWEEN '2019' AND '2022' THEN values END) > 1;

为什么之前的查询失败?

  • 第一个查询:GROUP BY countries, year后,每个分组是「单个国家+单个年份」,得到的是某一年的总和,而非2015-2018整个区间的总合计,所以结果只是那些在该区间内某一年总和为0的国家,不符合需求。
  • 第二个查询:同样分组到年份,单个分组的year不可能同时属于2015-2018和2019-2022两个区间,HAVING里的两个条件永远无法同时成立,自然返回空结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:16