0
点赞
收藏
分享

微信扫一扫

sql

好的,假设您有两个表:学生表(student)和课程表(course),其中学生表包含学生的信息,课程表包含课程的信息,两个表之间通过学生 ID 和课程 ID 进行关联。在学生表中,学生 ID 是主键;在课程表中,课程 ID 是主键。

学生表(student)结构:

字段名

数据类型

说明

id

int

学生 ID

name

varchar

学生姓名

课程表(course)结构:

字段名

数据类型

说明

id

int

课程 ID

name

varchar

课程名称

为了记录学生参加课程的情况,我们可以再创建一个选课表(selection),用于记录学生选修的课程信息。选课表中,使用学生 ID 和课程 ID 来关联学生和课程,同时记录学生在该门课程中的得分(score)。

选课表(selection)结构:

字段名

数据类型

说明

student_id

int

学生 ID

course_id

int

课程 ID

score

int

成绩

根据上述表结构,下面是一条 SQL 查询语句,用于统计每门课程参加人数以及每个学生所有课程的排名情况:

SELECT c.id AS course_id, c.name AS course_name, COUNT(s.student_id) AS student_num,
    s.student_id, st.name AS student_name, s.score,
    (SELECT COUNT(*) FROM selection AS s2 WHERE s2.course_id = s.course_id AND s2.score > s.score) + 1 AS rank
FROM course AS c
LEFT JOIN selection AS s ON c.id = s.course_id
LEFT JOIN student AS st ON s.student_id = st.id
GROUP BY c.id, s.student_id
ORDER BY c.id, rank

该查询语句使用了 LEFT JOIN 操作符将学生表、课程表和选课表进行关联。使用 GROUP BY 子句对课程 ID 和学生 ID 进行分组,统计每门课程参加人数以及每个学生所有课程的排名情况。使用子查询来计算每个学生在该门课程中的排名情况。最后使用 ORDER BY 子句按照课程 ID 和排名进行排序。

举报

相关推荐

0 条评论