有⼀张 Student 表,存储了 学生的 id,name,score,class_id 信息 ,有⼀张 class 表存储了 id,name 字段, 请找出每个班分数最高的前三名的 班级名称 ,学生姓名 ,学生分数信息
时间: 2023-09-19 19:08:09 浏览: 71
data/score.txt 学生分数表
可以以下 SQL 查询语句来实现:
```
SELECT c.name AS class_name, s.name AS student_name, s.score
FROM (
SELECT class_id, name, score,
ROW_NUMBER() OVER (PARTITION BY class_id ORDER BY score DESC) AS rank
FROM Student
) s
JOIN class c ON s.class_id = c.id
WHERE s.rank <= 3
ORDER BY c.name, s.score DESC;
```
说明:
1. 使用 `ROW_NUMBER()` 函数对每个班级内的学生成绩进行排名;
2. 使用 `JOIN` 连接 `class` 表和 `Student` 表;
3. 使用 `WHERE` 子句筛选出每个班级内排名前三的学生;
4. 使用 `ORDER BY` 子句按照班级名称和学生成绩进行排序。
阅读全文