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
成绩单
结果对比如下:
参考: