一、窗口函数
1、窗口函数的函义和作用
窗口函数也称为OLAP函数,可以对数据库数据进行实时分析处理;可以处理如下问题:
- 排名问题:每个部门按业绩来排名
- topN问题:找出每个部门排名前N的员工进行奖励
2、基本语法
![9a5cd0df83377e784254fbe80ef3d94d.png](https://img-blog.csdnimg.cn/img_convert/9a5cd0df83377e784254fbe80ef3d94d.png)
<窗口函数>的位置可以放以下两种函数:
- 专用窗口函数,包括rank,dense_rank,row_number等
- 聚合函数,如sum,avg,count,max,min等
因为窗口函数是对where或group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在select 子名中。
3、窗口函数的功能:
- 同时具有分组和排序的功能
- 不减少原表的行数
4、专用窗口函数(rank,dense_rank,row_number)
以rank为例:对表中每个班级的成绩进行排名
![0c200a244a37306c25dcf5f4ae7e53f2.png](https://img-blog.csdnimg.cn/img_convert/0c200a244a37306c25dcf5f4ae7e53f2.png)
![e2bdf3792dd7cbd4f58b71f55c926e49.png](https://img-blog.csdnimg.cn/img_convert/e2bdf3792dd7cbd4f58b71f55c926e49.png)
- partition by 用来对表分组,partition子句省略表示不指定分组。(group by 分组汇总改变行数;partition by 分组汇总行数不变)
- order by 对分组后的结果进行排序
- 专用函数后面的()不需要任何参数
rank,dense_rank,row_number的区别