SQL三种窗口函数对比

1.作用:用于(分组)排序

2.基本语法

<窗口函数> OVER (PARTITION BY <用于分组的列名> ORDER BY <用于排序的列名>)

三者的作用如下:

默认是是从小到大排,DESC是由大到小

函数说明
ROW_NUMBER为表中的每一行分配一个序号,可以指定分组(也可以不指定)及排序字段(连续且不重复)
DENSE_RANK根据排序字段为每个分组中的每一行分配一个序号。排名值相同时,序号相同,序号中没有间隙(1,1,1,2,3这种),即重复不占位
RANK

根据排序字段为每个分组中的每一行分配一个序号。排名值相同时,序号相同,但序号中存在间隙(1,1,1,4,5这种),重复占位

举例:

我们来看RANK()DENSE_RANK()ROW_NUMBER()三者的差异:

SELECT
 *,
 RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名 ,
 DENSE_RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS DENSE_RANK_排名 ,
 ROW_NUMBER() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS ROW_NUMBER_排名
FROM
 成绩单

结果对比如下:

图片

其他常用函数:

用于获取当前行之后的行的值LEAD(列名, 偏移量, 默认值) OVER (PARTITION BY 分区列 ORDER BY 排序列)

参考:

SQL数据分析实战:好用的窗口函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值