一.什么是窗口函数
1.窗口函数又称OLAP函数(Online Analytical Processing), 可对数据库中数据进行实时分析处理。
2.窗口函数的基本语法如下:
![317a23ab23664a8fae2dc83cdc11db99.png](https://i-blog.csdnimg.cn/blog_migrate/a7361ec6298c63cee83a9b5099846618.png)
其中的<窗口函数>包括专用窗口函数(rank、dense _rank、row _number等等)和聚合函数 (sum、avg、count、max、min等等)。
二.如何使用窗口函数
1.专用窗口函数rank
![d6b7312dfcde7fc2d2f8ec1b2433ebd8.png](https://i-blog.csdnimg.cn/blog_migrate/f2d3a661f7b85cdf60ecf8f7ef85a8be.png)
1)案例:根据上面的class表,查询各个班级中成绩从高到低的排名。
思路:将要求分为两步,首先看到“各个班级”,说明要按班级分组,需使用partition by子句;其次看到“成绩从高到低的排名 ”,说明要按成绩排序,需使用order by子句。这里需要注意的是,order by默认按照升序(asc)排列,在本例中需加desc表示降序。
SQL语句:
![97de8b57f6fdbecf9ae232efc9074618.png](https://i-blog.csdnimg.cn/blog_migrate/cb5d8d3ffa3d1fe1f99633e6a3d4b588.png)
查询结果:
![4ec15d276d7b7d48dd7c4263c4d38008.png](https://i-blog.csdnimg.cn/blog_migrate/5f47d12c465716afcb6df97b32310b2f.png)
2)“窗口”的含义:经过partition by分组后的结果称为“窗口”,是“范围”的意思。
2.其他专用窗口函数dense_rank、row_number
1)案例:根据上面的class表,分别用三个专用窗口函数对成绩进行从高到低排序。
SQL语句: