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

如何在MySQL中基于多列实现销售数据的累计求和?

实现员工年度累计销售额的SQL方案

现有如下sales表结构及数据:

CREATE TABLE sales(
                      id serial PRIMARY KEY,
                      sales_employee VARCHAR(50) NOT NULL,
                      fiscal_year INT NOT NULL,
                      sale DECIMAL(14,2) NOT NULL
);

INSERT INTO sales(sales_employee,fiscal_year,sale)
VALUES('Bob',2016,100),
      ('Bob',2017,150),
      ('Bob',2018,200),
      ('Alice',2016,150),
      ('Alice',2017,100),
      ('Alice',2018,200),
      ('John',2016,200),
      ('John',2017,150),
      ('John',2018,250);

需要得到每个员工截至对应财年的累计销售额(比如Bob2017年的数值是2016+2017的销售额之和),目标结果如下:

2016 Bob 100
2016 Alice 150
2016 John 200
2017 Bob 250
2017 Alice 250
2017 John 350
2018 Bob 450
2018 Alice 450
2018 John 600

实现方案

用PostgreSQL的窗口函数SUM() OVER()就能轻松解决,核心是按员工分组,按财年排序后计算累计求和:

SELECT
    fiscal_year,
    sales_employee,
    SUM(sale) OVER (
        PARTITION BY sales_employee 
        ORDER BY fiscal_year
    ) AS cumulative_sale
FROM sales
ORDER BY fiscal_year, sales_employee;

代码解释

  • PARTITION BY sales_employee:把数据按员工分组,每个员工的计算独立进行
  • ORDER BY fiscal_year:在每个员工组内,按财年从小到大排序
  • SUM(sale) OVER (...):对每个员工组内的销售额,从最早财年开始累计求和,得到截至当前财年的总销售额

这个方案支持任意数量的员工和财年,不用修改代码就能适配实际场景的大数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:02:25