使用SUM() OVER()实现累加计算,通过ORDER BY定义顺序,可结合PARTITION BY按组累加,支持高效运行总计。

SQL 中实现累加计算(即运行总计)通常使用窗口函数,特别是 SUM() OVER()。这是最常用且高效的方法。
使用 SUM() OVER() 实现累加
通过定义窗口范围,可以让 SUM 函数对从第一行到当前行的数据进行累计求和。
假设有一张销售表 sales,包含日期和金额:示例数据:
| date | amount | |------------|--------| | 2024-01-01 | 100 | | 2024-01-02 | 150 | | 2024-01-03 | 200 |
SQL 查询实现累加:
SELECT date, amount, SUM(amount) OVER (ORDER BY date) AS running_total FROM sales;
结果:
| date | amount | running_total | |------------|--------|---------------| | 2024-01-01 | 100 | 100 | | 2024-01-02 | 150 | 250 | | 2024-01-03 | 200 | 450 |
按分组进行累加(如按人员或类别)
如果需要在每个分组内独立累加,使用 PARTITION BY。
例如,不同销售人员各自的每日累计销售额:
SELECT
salesperson,
date,
amount,
SUM(amount) OVER (
PARTITION BY salesperson
ORDER BY date
) AS running_total
FROM sales_data;
控制累加范围(可选高级用法)
可以显式指定窗口范围,比如只累加前 N 行。
例如:累加当前行及前一行的和SUM(amount) OVER ( ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW )
基本上就这些。核心是利用 SUM() + OVER() + ORDER BY 构造有序窗口,让数据库自动完成逐行累加。这种方法简洁、高效,适用于大多数支持窗口函数的数据库(如 PostgreSQL、SQL Server、Oracle、MySQL 8.0+)。










