row_number和rank和dense_rank区别、,并举例
时间: 2023-09-24 22:06:14 浏览: 86
row_number、rank和dense_rank都是窗口函数,用于对查询结果进行排序并返回排序后的行号或排名。它们的主要区别在于如何处理并列排名的情况。
- row_number:按照指定的排序顺序为每一行分配一个唯一的行号,不考虑并列排名,即每行都有不同的行号。
举例:
```
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
FROM students;
```
结果:
```
name score row_num
Tom 90 1
Mike 85 2
John 85 3
Mary 80 4
```
- rank:按照指定的排序顺序为每一行分配一个排名,相同的行会得到相同的排名,但是会跳过相同排名的个数,即如果有两行并列排名第二,那么下一行的排名就是第四。
举例:
```
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank
FROM students;
```
结果:
```
name score rank
Tom 90 1
Mike 85 2
John 85 2
Mary 80 4
```
- dense_rank:按照指定的排序顺序为每一行分配一个排名,相同的行会得到相同的排名,但是不会跳过相同排名的个数,即如果有两行并列排名第二,那么下一行的排名就是第三。
举例:
```
SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
```
结果:
```
name score dense_rank
Tom 90 1
Mike 85 2
John 85 2
Mary 80 3
```
阅读全文