【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 …)

posted @ 2025-07-14 13:54  仰望星河Leon  阅读(28)  评论(0)    收藏  举报