【MySQL】开窗函数
开窗函数
开窗函数与聚合函数一样,也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值。 开窗函数可以为每组返回多个值,当需要每个组返回多个值时使用。
开窗函数和聚合函数的区别:
(1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。 (2)聚合函数每组只返回一个值,开窗函数每组可返回多个值。
开窗函数的调用格式为:
函数名(列名) OVER(partition by 列名 order by列名) 。
执行顺序
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行,晚于 where 、group by、 order by 的执行。
常用开窗函数
(1) row_number() over(): 对相等的值不进行区分,其实就是行号,相等的值对应的排名不同,序号从1到n连续。 (2) rank() over(): 相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。 (3) dense_rank() over(): 对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人。
与函数的功能一致,只是是开窗函数: count() over(partition by … order by …)
max() over(partition by … order by …)
min() over(partition by … order by …)
sum() over(partition by … order by …)
avg() over(partition by … order by …)
first_value() over(partition by … order by …)
last_value() over(partition by … order by …)

浙公网安备 33010602011771号