行转列/列转行
- 参考
https://www.cnblogs.com/linJie1930906722/p/6036714.html
行转列
列转行
移动平均窗口函数
参考
- https://zhuanlan.zhihu.com/p/150812199
定义
移动平均值的定义:若依次得到测定值(x1,x2,x3,…xn)时,按顺序取一定个数所做的全部算数平均值。例如(x1+x2+x3)/3,(x2+x3+x4)/3,(x3+x4+x5)/3,…就是移动平均值。其中,x可以是日或者月,以上的可以成为3日移动平均,或3月移动平均,常用于股票分析中。
语法
- 语法结构:
avg(字段名) over(partition by 字段名 order by 字段名 asc/desc rows between A and B )
-- A和B是计算的行数范围
- 影响行数的范围(限定计算移动平均的范围):
rows between 2 preceding and current row # 取当前行和前面两行
rows between unbounded preceding and current row # 包括本行和之前所有的行
rows between current row and unbounded following # 包括本行和之后所有的行
rows between 3 preceding and current row # 包括本行和前面三行
rows between 3 preceding and 1 following # 从前面三行和下面一行,总共五行
当order by后面缺少窗口从句条件,窗口规范默认是rows between unbounded preceding and current row.
当order by和窗口从句都缺失, 窗口规范默认是 rows between unbounded preceding and unbounded following
- 以v_info举个例子吧
SELECT *,
AVG(grade) OVER(ORDER BY stu_no ROWS BETWEEN 2 preceding AND CURRENT ROW) AS '三移动平均'
FROM v_info
对于第一行来说,没有前面两行,所以值就为当前行的值
对于第二行来说,前面只有一行,所以三移动平均就为第一行和第二行的平均值
影响行数范围的语句在标准的聚合函数中都适用。