求编写SQL实现按年度对Applications列累计求和的查询语句
实现MySQL按年度分组的Applications累计求和
没问题,我帮你搞定这个累计求和的需求!先把你的需求和数据理清楚:
原始数据表
Week Year Applications 1 2017 0 2 2017 10 3 2017 20 4 2017 50 5 2017 0 1 2018 10 2 2018 0 3 2018 40 4 2018 50 5 2018 10
期望输出结果
Week Year Applications 1 2017 0 2 2017 10 3 2017 30 4 2017 80 5 2017 80 1 2018 10 2 2018 10 3 2018 50 4 2018 100 5 2018 110
对应的SQL查询语句
如果你的MySQL版本是8.0及以上,推荐用窗口函数来实现,简洁又高效:
SELECT Week, Year, SUM(Applications) OVER (PARTITION BY Year ORDER BY Week) AS Applications FROM your_table_name -- 替换成你的实际表名 ORDER BY Year, Week;
语句说明
PARTITION BY Year:把数据按年度拆分,确保累计求和只在同一年度内进行,不会跨年度计算ORDER BY Week:保证每组内按周数顺序累加,每一行的结果是当前周及之前所有周的Applications总和- 最后的
ORDER BY Year, Week是为了让输出顺序和你期望的一致
兼容旧版本MySQL的方案(低于8.0)
如果你的MySQL不支持窗口函数,可以用自连接的方式实现:
SELECT t1.Week, t1.Year, SUM(t2.Applications) AS Applications FROM your_table_name t1 JOIN your_table_name t2 ON t1.Year = t2.Year AND t2.Week <= t1.Week GROUP BY t1.Year, t1.Week ORDER BY t1.Year, t1.Week;
这个逻辑是把每一行数据和同年度内周数小于等于它的所有行做连接,再对连接后的Applications字段求和,同样能得到累计结果。
内容的提问来源于stack exchange,提问作者User5590
相关产品推荐
相关产品推荐

