窗口函数
应用场景
窗口函数通常用于解决
- 组内排名问题,即在每个小组中进行排序,取出每组的前N个观测
- 组内累计聚合问题,即在每个小组中进行排序,然后进行累计聚合
基本语法
<窗口函数> over (partition by 用于分组的变量 order by 用于排序的变量 [desc/asc])常用的窗口函数
-
专用窗口函数:
函数名
结果 rank() 都会根据分组变量进行分组后,在每个组内根据排序变量进行排序,区别在于当排序变量值相同,即出现并列时的结果并列会顺延排名,即1,1,3,4,5 dense_rank() 并列不会顺延排名,即1,1,2,3,4 row_number() 不考虑并列,相同的观测会随机排序,即1,2,3,4,5 - 聚合函数:avg,sum,min,max等聚合函数,得到每个分组的累计聚合值;结果是根据分组变量进行分组,在每个组内根据排序变量进行排序后,由前到后根据聚合函数进行累计聚合,得到相应的累计求和,累计平均等
select *,rank() over (partition by class order by score),avg(score) over (partition by class order by score) from class_table注意事项
- 原则上,窗口函数只能写在select子句中
- 专用窗口函数的括号内不需要填变量或参数
- 与group by的差别在于partition by不会减少行数,而group by会将表的行数减少到类别的数量,因此group by得到的是分组的总聚合值,窗口函数得到的是分组的累计聚合值