17370845950

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

SQL 中实现累加计算(即运行总计)通常使用窗口函数,特别是 SUM() OVER()。这是最常用且高效的方法。

使用 SUM() OVER() 实现累加

通过定义窗口范围,可以让 SUM 函数对从第一行到当前行的数据进行累计求和。

假设有一张销售表 sales,包含日期和金额:

示例数据:

| date       | amount |
|------------|--------|
| 2025-01-01 | 100    |
| 2025-01-02 | 150    |
| 2025-01-03 | 200    |

SQL 查询实现累加:

SELECT 
  date,
  amount,
  SUM(amount) OVER (ORDER BY date) AS running_total
FROM sales;

结果:

| date       | amount | running_total |
|------------|--------|---------------|
| 2025-01-01 | 100    | 100           |
| 2025-01-02 | 150    | 250           |
| 2025-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+)。