DENSE_RANK
时间: 2023-08-17 08:07:16 浏览: 93
RANK 和 DENSE_RANK 是 SQL 中用于对结果集进行排序的函数。
RANK 用于给结果集中的行分配排名。如果有多行具有相同的值,则它们将具有相同的排名。
DENSE_RANK 与 RANK 类似,但不会出现排名间的“空缺”。如果有多行具有相同的值,则它们将具有相同的排名,但后续行的排名将比 RANK 多1。
简单来说,RANK 会有排名间的“空缺”,DENSE_RANK 不会。
相关问题
dense_rank
"DENSE_RANK" 是一个在 SQL 查询中使用的窗口函数,它用于计算结果集中每一行的稠密排名。它与 "RANK" 和 "ROW_NUMBER" 函数类似,但不同之处在于,如果有多个行具有相同的排序值,则 DENSE_RANK 会为它们分配相同的排名,并在下一个不同的值出现时递增排名。这意味着可能会跳过排名。
例如,假设有一个包含销售数据的表格,其中每个销售记录都有一个销售金额。如果我们想为每个销售金额分配稠密排名,可以使用 DENSE_RANK 函数。
请注意,具体的语法和用法可能会根据不同的数据库系统有所不同。你可以提供更具体的情况,我可以为你提供更详细的帮助。
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,这是因为前面有两个分数比它高的行。
阅读全文