dense_rank() over函数
时间: 2023-09-09 22:10:22 浏览: 61
`dense_rank()` 是 SQL 中的一个窗口函数(Window Function),可以用来计算某一列的排名。它与 `rank()` 和 `row_number()` 类似,但是不同的是,它会跳过排名相同的值,而不是像 `rank()` 和 `row_number()` 一样跳过排名之间的空位。
`dense_rank()` 的语法如下:
```
dense_rank() over([partition by 列名] order by 列名)
```
其中,`partition by` 子句用于指定分区依据的列名,`order by` 子句用于指定排序依据的列名。如果不指定 `partition by` 子句,则会将整个表作为一个分区。
举个例子,假设有一个表 `scores` 包含学生的成绩信息,如下所示:
```
| name | subject | score |
|-------|---------|-------|
| Alice | Math | 90 |
| Bob | Math | 80 |
| Carol | Math | 90 |
| Alice | English | 85 |
| Bob | English | 90 |
| Carol | English | 95 |
```
要求按照每个学生的总分进行排名,可以使用如下 SQL:
```
SELECT name, subject, score,
dense_rank() OVER (PARTITION BY name ORDER BY SUM(score) DESC) AS ranking
FROM scores
```
查询结果如下:
```
| name | subject | score | ranking |
|-------|---------|-------|---------|
| Alice | Math | 90 | 2 |
| Alice | English | 85 | 2 |
| Bob | Math | 80 | 3 |
| Bob | English | 90 | 2 |
| Carol | Math | 90 | 1 |
| Carol | English | 95 | 1 |
```
可以看到,`dense_rank()` 函数按照每个学生的总分进行排名,并且对于排名相同的学生,它会跳过排名之间的空位,例如 Alice 和 Carol 都是第一名。
阅读全文