信息发布→ 登录 注册 退出

SQL 数值函数如何计算累计和与平均值?

发布时间:2025-10-10

点击量:
使用窗口函数可计算累计和与移动平均值,SUM()和AVG()结合OVER()子句按排序或分组实现累积计算,如按产品分组的累计收入和3日移动平均。

在 SQL 中,计算累计和与平均值主要依赖窗口函数(Window Functions),它们可以在不改变原始行数的情况下,对数据进行分组、排序并执行累积计算。

累计和(Running Total)

使用 SUM() 窗口函数结合 OVER() 子句可以实现累计和。关键在于定义排序顺序,确保累计按预期进行。

语法示例:

SUM(列名) OVER (ORDER BY 排序列)

如果需要按某一维度(如用户、部门)分别计算累计和,则加入 PARTITION BY

SUM(金额) OVER (PARTITION BY 用户ID ORDER BY 日期)

这表示:每个用户的金额按日期顺序逐行累加。

移动平均值(Moving Average)

平均值可通过 AVG() 窗口函数实现。与 SUM 类似,结合 OVER() 可计算累计平均或指定范围的移动平均。

计算每个记录的累计平均值:

AVG(数值) OVER (ORDER BY 时间戳 ROWS UNBOUNDED PRECEDING)

若要计算最近 3 行的移动平均(含当前行),使用:

AVG(数值) OVER (ORDER BY 时间戳 ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)

实际应用示例

假设有一张销售表 sales,包含字段:date, product, revenue。想查看每个产品每日收入的累计和与 3 日移动平均:

SELECT
  date,
  product,
  revenue,
  SUM(revenue) OVER (PARTITION BY product ORDER BY date) AS running_total,
  AVG(revenue) OVER (PARTITION BY product ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_avg
FROM sales;

结果中每行保留原始数据,同时附加两个计算列:累计收入和近期平均收入。

基本上就这些。掌握 OVER() 中的 ORDER BYROWS 定义是关键,能灵活控制累计与滑动计算的范围。
标签:# win  # sql  # select  # date  # 子句  # 可计算  # 可以实现  # 可通过  # 若要  # 关键在于  # 实际应用  # 不改变  # 行数  # 情况下  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!