编写MySQL查询语句展示指定学期所有学生成绩
MySQL查询展示学期学生成绩结果
嘿,针对你的需求,我整理了几种不同场景的MySQL查询语句,你可以根据实际需要选用:
1. 基础查询:列出指定学期所有学生的每科成绩
如果只是需要清晰展示该学期(比如Semester Id为1)每个学生的各科成绩,直接查询即可:
SELECT `Student Id` AS 学生ID, `Subject Id` AS 科目ID, Marks AS 成绩 FROM semester_student_marks WHERE `Semester Id` = 1; -- 替换成你需要查询的学期ID
这里用了别名让结果更易读,如果你不需要别名,直接SELECT * FROM semester_student_marks WHERE Semester Id = 1;也可以,但指定字段会让结果更聚焦。
2. 汇总查询:展示每个学生的总分、平均分
如果需要对每个学生的成绩做汇总统计,比如计算总分和平均分,可以用分组查询:
SELECT `Student Id` AS 学生ID, COUNT(`Subject Id`) AS 科目数量, SUM(Marks) AS 总分, ROUND(AVG(Marks), 2) AS 平均分 -- 保留两位小数 FROM semester_student_marks WHERE `Semester Id` = 1 GROUP BY `Student Id` ORDER BY 总分 DESC; -- 按总分降序排列,方便查看排名
这个查询会按学生分组,统计每个学生的科目数、总分和平均分,排序后能直观看到学生的成绩排名。
3. 行转列:把科目成绩展示为列(适合科目固定的情况)
如果你的科目数量固定(比如只有科目1、科目2),可以用条件聚合把每行的科目成绩转成列,让结果更像传统成绩单:
SELECT `Student Id` AS 学生ID, MAX(CASE WHEN `Subject Id` = 1 THEN Marks END) AS 科目1成绩, MAX(CASE WHEN `Subject Id` = 2 THEN Marks END) AS 科目2成绩, SUM(Marks) AS 总分, ROUND(AVG(Marks), 2) AS 平均分 FROM semester_student_marks WHERE `Semester Id` = 1 GROUP BY `Student Id`;
如果有更多科目,只需要继续添加MAX(CASE WHEN Subject Id = N THEN Marks END) AS 科目N成绩这类语句即可。
内容的提问来源于stack exchange,提问作者Venkat D
相关产品推荐
相关产品推荐

