文章目录
前言:窗口函数属于SQL的高级查询功能,有些数据库的低版本可能还不支持,如MySQL5.7版本暂不支持,SQL Server是支持的。
1、窗口函数的简单介绍
- 窗口函数即 Window Function,也称为OLAP函数,意思是对数据库数据进行实时分析处理。窗口函数就是为了实现OLAP而添加的标准SQL功能。
- 窗口函数与聚合函数类似,但是每一行数据都生成一个结果。
- 聚合函数可以将多行数据按照规定聚合为一行,一般来说聚合后的行数要少于聚合前的行数,但是有时我们想要既显示聚合前的数据,又要显示聚合后的数据,这时便引入了窗口函数。
- 窗口函数在SELECT时执行的,位于ORDER BY之前。
2、累计计算窗口函数
2.1 普通累计
- 适用于聚合函数,如 sum() over(partition by … order by …)
- partition by 起到了分组的作用
- order by 按照什么顺序进行累加,升序ASC、降序DESC,默认升序
# 以年为分组,按月份累加计算营业额
SELECT month,
amount,
sum(amount) over (partition by year order by month)
FROM trade
2.2 移动累计
- 普通累计基础上加上限制计算移动平均的范围,如移动的累计求近三个月营业额的情况
- sum() over(partition by … order by …rows between… preceding… and…following)
- rows between:包含的行
- preceding:前面的行;unbounded preceding:前面的所有行
- following:后面的行;unbounded following:后面的所有行
rows between unbounded preceding and current row # 包括本行和之前的所有行
rows between 3 preceding and current row # 包括本行以内和前三行