rank() dense_rank
时间: 2024-01-12 10:04:00 浏览: 78
rank()和dense_rank()都是用于计算排名的SQL函数,但是它们之间有一些区别。rank()函数在并列关系时,会跳过相关等级,而dense_rank()函数则不会跳过。举个例子,如果有两个人得分相同,那么使用rank()函数计算排名时,下一个排名会跳过一个名次,而使用dense_rank()函数计算排名时,下一个排名会继续排在同一名次。在SQL查询语句中,可以使用类似于SELECT RANK() OVER (ORDER BY score DESC) AS rank FROM scores;这样的语句来计算排名。
相关问题
rank dense_rank
这两个都是窗口函数中的排名函数,主要用于排序后对行进行编号。不同之处在于当值相同时,rank 会跳过相等的值,而 dense_rank 则不会跳过。
具体来说,假设有如下表格:
| id | score |
|----|-------|
| 1 | 90 |
| 2 | 80 |
| 3 | 90 |
| 4 | 70 |
使用 `rank()` 函数后,会得到以下结果:
| id | score | rank |
|----|-------|------|
| 1 | 90 | 1 |
| 2 | 80 | 2 |
| 3 | 90 | 1 |
| 4 | 70 | 4 |
可以看到,在第一、三行中,分数相等,因此它们的 rank 都是 1;而在第二行中,因为前面已经有一个分数比它高的行,因此它的 rank 是 2。注意第四行的 rank 不是 3 而是 4,这是因为排名函数默认升序排序。
使用 `dense_rank()` 函数后,会得到以下结果:
| id | score | dense_rank |
|----|-------|-----------|
| 1 | 90 | 1 |
| 2 | 80 | 2 |
| 3 | 90 | 1 |
| 4 | 70 | 3 |
可以看到,虽然第一、三行的分数相等,但 dense_rank 函数没有跳过它们,因此都是 1。另外,第四行的 dense_rank 是 3,这是因为前面有两个分数比它高的行。
rank dense_rank row_number
这是三种不同的 SQL 函数,用于排名和排序。
1. Rank函数:在排序结果中给每一行分配一个排名,如果有并列行,会跳过相应的排名。如:1, 2, 3, 4, 4, 6。
2. Dense_rank函数:在排序结果中给每一行分配一个排名,如果有并列行,不会跳过相应的排名。如:1, 2, 3, 4, 4, 5。
3. Row_number函数:为每一行分配唯一的行号,不会跳过任何行。如:1, 2, 3, 4, 5, 6。
阅读全文