开窗函数(Window Function)是一种 SQL 函数,支持在查询结果集的每一行上执行聚合操作,使用在 SELECT 和 ORDER BY 子句中。开窗函数使用 OVER 子句定义一个窗口(Window),指定如何从输入行组中构造一个计算行集合,然后基于该行集合计算聚合值或对输出进行变换。下面是开窗函数的 SQL 用法实例:
假设我们有一个名为 students_scores 的表,包含学生名字和成绩:
| id | name | score |
|----|---------|-------|
| 1 | Alice | 80 |
| 2 | Bob | 90 |
| 3 | Charlie | 85 |
| 4 | David | 95 |
| 5 | Eve | 88 |
1. 计算每个学生的成绩排名(Rank):
```
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank
FROM students_scores;
```
结果:
| name | score | rank |
|---------|-------|------|
| David | 95 | 1 |
| Bob | 90 | 2 |
| Eve | 88 | 3 |
| Charlie | 85 | 4 |
| Alice | 80 | 5 |
2. 计算每个学生的成绩排名(Dense Rank):
```
SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students_scores;
```
结果:
| name | score | dense_rank |
|---------|-------|------------|
| David | 95 | 1 |
| Bob | 90 | 2 |
| Eve | 88 | 3 |
| Charlie | 85 | 4 |
| Alice | 80 | 5 |
3. 计算每个学生的成绩排名(Row Number):
```
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) AS row_number
FROM students_scores;
```
结果:
| name | score | row_number |
|---------|-------|------------|
| David | 95 | 1 |
| Bob | 90 | 2 |
| Eve | 88 | 3 |
| Charlie | 85 | 4 |
| Alice | 80 | 5 |
以上是一些常见的开窗函数用例,不同的场景下可能需要不同的聚合和窗口定义方式。需要根据具体需求来选择合适的开窗函数及其参数设置。