row_number和rank和dense_rank
时间: 2023-09-24 11:05:44 浏览: 93
row_number、rank和dense_rank都是用于窗口函数中的排序函数。
- row_number:为每一行分配一个唯一的数字,按照指定的排序顺序(默认是升序)进行排序。
- rank:为相同的值分配相同的排名,不连续。例如,如果有两个值的排名为1,则下一个值的排名将为3(跳过2)。
- dense_rank:为相同的值分配相同的排名,连续。例如,如果有两个值的排名为1,则下一个值的排名将为2。
举个例子:
```
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
RANK() OVER (ORDER BY score DESC) AS rank_num,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank_num
FROM students;
```
以上SQL语句将学生表按照成绩从高到低排序,并为每个学生分配row_number、rank和dense_rank。结果可能如下:
```
| name | score | row_num | rank_num | dense_rank_num |
|-------|-------|---------|----------|----------------|
| Tom | 90 | 1 | 1 | 1 |
| Jack | 85 | 2 | 2 | 2 |
| Alice | 85 | 3 | 2 | 2 |
| Lucy | 80 | 4 | 4 | 3 |
| Bob | 70 | 5 | 5 | 4 |
```
可以看到,Tom的成绩最高,所以他的row_number、rank和dense_rank都是1;Jack和Alice的成绩相同,所以他们的rank是2,但是dense_rank都是2;Lucy的成绩排在第4位,所以他的rank是4,但是dense_rank是3。Bob的成绩最低,所以他的row_number、rank和dense_rank都是5。
阅读全文