请介绍下,rank() dense_rank()
时间: 2023-12-03 07:46:03 浏览: 30
这两个都是 SQL 中的排名函数,用于在查询结果中对数据进行排名和排序。
rank() 函数会给查询结果中的每一行赋一个排名,排名相同的行会得到相同的排名,并且下一个排名会跳过相应数量的行。例如,如果有两行排名为 2,那么下一个排名将会是 4。
dense_rank() 函数与 rank() 函数类似,不同之处在于它不会跳过相同排名的行,而是为每一行赋予一个连续的排名。例如,如果有两行排名为 2,那么下一个排名将会是 3,而不是 4。
举个例子,假设有一张成绩表,包含学生姓名和成绩,我们可以使用 rank() 函数来给每个学生的成绩排名:
```
SELECT name, score, RANK() OVER (ORDER BY score DESC) as ranking
FROM scores;
```
结果可能如下:
```
name | score | ranking
-------------------------
Alice | 95 | 1
Bob | 90 | 2
Charlie | 85 | 3
Dave | 85 | 3
```
可以看到,排名相同的行得到了相同的排名(Charlie 和 Dave 都是第 3 名),而下一个排名跳过了相应的行(Bob 是第 2 名,所以下一个排名是第 3 名)。
如果我们使用 dense_rank() 函数来进行排名,结果可能如下:
```
name | score | ranking
-------------------------
Alice | 95 | 1
Bob | 90 | 2
Charlie | 85 | 3
Dave | 85 | 3
Emily | 80 | 4
```
可以看到,排名相同的行得到了连续的排名(Charlie 和 Dave 都是第 3 名和第 4 名),而下一个排名也是连续的(Emily 是第 5 名)。
阅读全文