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 排序列) |
参考:

3565

被折叠的 条评论
为什么被折叠?



