我的mysql数据库有一张sc表里面有三个字段分别是s_id学号、c_id课程号,score成绩,现在要统计各科成绩的排名,SQL怎样写?
时间: 2024-05-09 16:17:09 浏览: 50
学科、姓名、分数。 分别计算每门学科分数最高的前三名,并显示名次。写入MySQL中。
你可以使用以下 SQL 语句来实现统计每门课程的排名:
```
SELECT c_id, s_id, score,
(SELECT COUNT(*) FROM sc s2 WHERE s2.c_id = sc.c_id AND s2.score > sc.score) + 1 AS rank
FROM sc
ORDER BY c_id, score DESC;
```
解释一下这个 SQL 语句的具体含义:
首先通过 `FROM sc` 来指定查询的表是 sc 表。
然后通过选择列表示从该表中选择相应的字段,包括 c_id、s_id、score 和 rank 四个字段。其中 c_id 表示课程号,s_id 表示学号,score 表示成绩。rank 表示每个学生在该门课程中的排名。
对于每个记录,我们需要计算它在该门课程中的排名。这里我们使用子查询来计算。子查询 `SELECT COUNT(*) FROM sc s2 WHERE s2.c_id = sc.c_id AND s2.score > sc.score` 表示查找 sc 表中相同课程号(c_id)且成绩高于当前记录的行数。然后加上 1 就是该记录在该门课程中的排名。
最后通过 `ORDER BY c_id, score DESC` 来对结果集进行排序。首先按照课程号排序,然后按照成绩从高到低排序。
希望能帮到你。
阅读全文