查询每个课程分数最高的同学的分数和学号,若某门课程最高分有多个同学则取学号小的一个,例如加入 01和02都是课程c的最高分,但查询结果中不应有02
时间: 2024-04-11 20:26:35 浏览: 103
你可以使用子查询和窗口函数来解决这个问题。以下是一个示例查询,可以返回每门课程分数最高的同学的分数和学号(如果有多个同学得分相同,则选择学号最小的一个):
```sql
WITH max_scores AS (
SELECT c_id, MAX(score) AS max_score
FROM sc
GROUP BY c_id
)
SELECT s.s_id, s.c_id, sc.score
FROM (
SELECT s_id, c_id, score, ROW_NUMBER() OVER (PARTITION BY c_id ORDER BY score DESC, s_id) AS row_num
FROM sc
) AS sc
JOIN max_scores ms ON sc.c_id = ms.c_id AND sc.score = ms.max_score
JOIN student s ON sc.s_id = s.s_id
WHERE sc.row_num = 1;
```
这个查询首先在 `max_scores` 子查询中找到每门课程的最高分数。然后,在主查询中,使用窗口函数 `ROW_NUMBER()` 对每门课程的分数进行排序,并标记每个同学的排名。最后,通过连接 `max_scores` 和 `student` 表,将结果限制为每门课程中排名第一的同学(如果有多个同学得分相同,则选择学号最小的一个)。
希望这个查询对你有帮助!如果你有任何其他问题,请随时提问。
相关问题
查询数据库c2课程的最高分和最高分的学号
好的,假设您的数据库中有一个名为"score"的表格,其中包括学生的学号和课程分数,以及课程名称的一列。为查询"c2课程"的最高分和最高分的学号,您可以使用以下SQL查询语句:
```
SELECT MAX(score) AS max_score, student_id
FROM score
WHERE course_name = 'c2'
GROUP BY student_id
ORDER BY max_score DESC
LIMIT 1;
```
这条SQL语句会返回"c2课程"中分数最高的学生的学号和分数。请注意,这里假设每个学生只有一条"c2课程"的分数记录,如果有多条记录,那么需要根据具体情况进行调整。
SQL SEVER查询选修了“C02”号课程的学生最高分数。如果最高分有多个学生,按学号降序排列
好的,您可以尝试使用以下 SQL 查询语句:
```
SELECT MAX(score) as max_score, student_id
FROM student_course
WHERE course_id = 'C02'
GROUP BY student_id
HAVING MAX(score) = (SELECT MAX(score) FROM student_course WHERE course_id = 'C02')
ORDER BY student_id DESC;
```
解释一下这个查询语句:
- `student_course` 是指学生选课表的表名,您需要替换成您实际使用的表名。
- `MAX(score) as max_score, student_id` 表示计算选修了 C02 号课程的学生最高分数,并且选择学号,方便按学号排序。
- `WHERE course_id = 'C02'` 表示只选择选修了 C02 号课程的学生。
- `GROUP BY student_id` 表示按学生分组,以便计算每个学生的最高分数。
- `HAVING MAX(score) = (SELECT MAX(score) FROM student_course WHERE course_id = 'C02')` 表示只选择最高分数等于 C02 号课程的最高分数的学生。
- `ORDER BY student_id DESC` 表示按学号降序排列。
希望这个查询语句能够帮到您!
阅读全文