RANK, DENSE_RANK, ROW_NUMBER都是把表中的行按分区内的排序标上序号,但有一点差别:
RANK:可以生成不连续的序号,比如按分数排序,第一第二都是100分,第三名98分,那第一第二就会显示序号1,第三名显示序号3。
DENSE_RANK: 生成连续的序号,在上一例子中,第一第二并列显示序号1,第三名会显示序号2。
ROW_NUMBER: 顾名思义就是行的数值,在上一例子中,第一第二第三将会显示序号为1,2,3。
下面的例子帮助理解,按年级分组,分数降序排列,分别新建列RANK, DENSE_RANK, ROW_NUMBER:
姓名 | 年级 | 分数 | RANK | DENSE_RANK | ROW_NUMBER |
张三 | 一年级 | 100 | 1 | 1 | 1 |
李四 | 一年级 | 100 | 1 | 1 | 2 |
王五 | 一年级 | 98 | 3 | 2 | 3 |
小明 | 二年级 | 100 | 1 | 1 | 1 |
小芳 |