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

在 SQL 中,计算累计和与平均值主要依赖窗口函数(Wind%ignore_a_1%w Functions),它们可以在不改变原始行数的情况下,对数据进行分组、排序并执行累积计算。
累计和(Running Total)
使用 SUM() 窗口函数结合 OVER() 子句可以实现累计和。关键在于定义排序顺序,确保累计按预期进行。
语法示例:
SUM(列名) OVER (ORDER BY 排序列)
如果需要按某一维度(如用户、部门)分别计算累计和,则加入 PARTITION BY:
SUM(金额) OVER (PARTITION BY 用户ID ORDER BY 日期)
这表示:每个用户的金额按日期顺序逐行累加。
移动平均值(Moving Average)
平均值可通过 AVG() 窗口函数实现。与 SUM 类似,结合 OVER() 可计算累计平均或指定范围的移动平均。
arXiv Xplorer
ArXiv 语义搜索引擎,帮您快速轻松的查找,保存和下载arXiv文章。
73 查看详情
计算每个记录的累计平均值:
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 BY 和 ROWS 定义是关键,能灵活控制累计与滑动计算的范围。
以上就是SQL 数值函数如何计算累计和与平均值?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1088381.html
微信扫一扫
支付宝扫一扫