今天做题碰见了个没见过的开窗函数
什么是开窗函数
开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。
聚合开窗函数就是我们常见的avg()、count()、sum()等。SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数
目前在 MSSQLServer、Oracle、DB2 等主流数据库中都提供了对开窗函数的支持,但在 mysql中还不支持。
经常能用到的排序函数
(1) row_number() over():对相等的值不进行区分,相等的值对应的排名不相同,序号从1到n连续。
(2) dense_rank() over():对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。
(3) rank() over():相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。
(4) ntile( n ) over():可以看作是把有序的数据集合平均分配到指定的数量n的桶中,将桶号分配给每一行,排序对应的数字为桶号。如果不能平均分配,则较小桶号的桶分配额外的行,并且各个桶中能放的数据条数最多相差1。
语法
<开窗函数&g