Sql 窗口函数中的RANK(),请用一个详细例子说明下
时间: 2024-03-12 17:44:29 浏览: 19
RANK() 是 SQL 窗口函数中的一种,用于为结果集中的每个分组分配一个排名,排名相同的行将会有相同的排名值,但是排名值之间可能会有空缺。
下面是一个详细的 RANK() 函数的例子:
假设有一个存储成绩信息的表,表结构如下:
```sql
CREATE TABLE scores (
name VARCHAR(20),
subject VARCHAR(20),
score INT
);
```
表中存储了每个学生的姓名、科目和成绩信息,我们需要查询出每个科目中成绩排名前三的学生信息。
可以使用如下 SQL 查询语句来实现:
```sql
SELECT name, subject, score, RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS rank
FROM scores
WHERE rank <= 3;
```
上述查询语句中,RANK() 函数被用于为每个科目的成绩进行排名,PARTITION BY 子句用于指定按照科目进行分组,ORDER BY 子句用于指定按照成绩进行排序。最终查询结果中,每个学生的姓名、科目、成绩和排名信息都被包含在内,排名前三的学生信息被筛选出来并返回。
例如,针对以下样例数据:
| name | subject | score |
| ---- | ------- | ----- |
| Tom | Math | 90 |
| Jack | Math | 85 |
| Lily | Math | 92 |
| Bob | Math | 88 |
| Lucy | Math | 91 |
| Tom | English | 78 |
| Jack | English | 87 |
| Lily | English | 84 |
| Bob | English | 91 |
| Lucy | English | 88 |
查询结果会返回以下信息:
| name | subject | score | rank |
| ---- | ------- | ----- | ---- |
| Lily | Math | 92 | 1 |
| Lucy | Math | 91 | 2 |
| Tom | Math | 90 | 3 |
| Bob | English | 91 | 1 |
| Jack | English | 87 | 2 |
| Lucy | English | 88 | 3 |
可以看到,查询结果中每个科目的排名前三的学生信息都被正确地筛选出来并返回。