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

如何编写SQL查询,基于列值求和计数,按需求展示各年份对应2017年计数总和

按年份累计求和的SQL解决方案

嘿,针对你需要计算每个YOA年份到2017年的计数总和这个需求,我整理了两种实用的SQL写法,适配不同的数据库环境:

方法一:窗口函数(推荐,适用于MySQL 8.0+、PostgreSQL、SQL Server等现代数据库)

窗口函数是实现这类累计计算最简洁高效的方式,代码如下:

SELECT DISTINCT
    YOA,
    CONCAT(YOA, ' - ', SUM(Count) OVER (ORDER BY YOA DESC RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)) AS year_total
FROM your_dataset;

关键逻辑说明

  • SUM(Count) OVER (ORDER BY YOA DESC RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING):按YOA从大到小排序后,窗口范围是当前行到最后一行(也就是2017年的数据),这样求和就得到了当前年份到2017年的所有计数总和。
  • DISTINCT:原数据中同一个YOA对应多条记录,去重后就能得到每个年份唯一的结果行。

方法二:子查询自连接(兼容旧版数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x版本),可以用自连接加分组的方式实现:

SELECT
    t1.YOA,
    CONCAT(t1.YOA, ' - ', SUM(t2.Count)) AS year_total
FROM your_dataset t1
INNER JOIN your_dataset t2 ON t2.YOA >= t1.YOA
GROUP BY t1.YOA
ORDER BY t1.YOA DESC;

逻辑拆解

  • 通过自连接,让每个t1.YOA匹配所有大于等于它的t2.YOA,这样t2集合就包含了当前年份及之后(直到2017)的所有数据。
  • 对t2.Count求和后按t1.YOA分组,就能得到每个年份对应的累计总和。

测试结果验证

用你提供的数据集运行上述SQL,会得到如下输出:

2017 - 185
2016 - 291
2015 - 482
2014 - 663

(计算过程:2016年总和=47+26+33+185=291;2015年总和=191+291=482;2014年总和=43+2+17+119+482=663)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:10