用SQL语言写一个成绩管理系统,策略分析题目:1)按照学生学号,查询该生所有的课程选择及得分情况,并进行平均分,绩点计算。显示该生三类课程的门数和平均分。(必修,选修和任选课),其中任选课程若不及格不计入。2)按照课程号,查询该课程所有学生的得分情况,并进行平均分,方差等计算。按照成绩进行排序。3)根据班号,统计该班学生的不及格的全部信息。
时间: 2024-03-14 08:47:25 浏览: 74
好的,以下是成绩管理系统的SQL语言代码:
1)按照学生学号,查询该生所有的课程选择及得分情况,并进行平均分,绩点计算。显示该生三类课程的门数和平均分。(必修,选修和任选课),其中任选课程若不及格不计入。
```
SELECT s.student_id,
COUNT(CASE WHEN c.course_type = '必修' THEN 1 END) AS compulsory_num,
COUNT(CASE WHEN c.course_type = '选修' THEN 1 END) AS elective_num,
COUNT(CASE WHEN c.course_type = '任选' AND g.grade >= 60 THEN 1 END) AS optional_num,
AVG(CASE WHEN c.course_type = '必修' THEN g.grade END) AS compulsory_avg,
AVG(CASE WHEN c.course_type = '选修' THEN g.grade END) AS elective_avg,
AVG(CASE WHEN c.course_type = '任选' AND g.grade >= 60 THEN g.grade END) AS optional_avg,
SUM(CASE WHEN g.grade >= 90 THEN 4.0 WHEN g.grade >= 80 THEN 3.0 WHEN g.grade >= 70 THEN 2.0 WHEN g.grade >= 60 THEN 1.0 ELSE 0.0 END) / COUNT(*) AS gpa
FROM student s
JOIN grade g ON s.student_id = g.student_id
JOIN course c ON g.course_id = c.course_id
WHERE s.student_id = 'xxx'
GROUP BY s.student_id;
```
2)按照课程号,查询该课程所有学生的得分情况,并进行平均分,方差等计算。按照成绩进行排序。
```
SELECT c.course_id,
COUNT(*) AS student_num,
AVG(g.grade) AS avg_grade,
VAR_POP(g.grade) AS var_pop_grade,
VAR_SAMP(g.grade) AS var_samp_grade,
STDDEV_POP(g.grade) AS stddev_pop_grade,
STDDEV_SAMP(g.grade) AS stddev_samp_grade
FROM grade g
JOIN course c ON g.course_id = c.course_id
WHERE c.course_id = 'xxx'
GROUP BY c.course_id
ORDER BY avg_grade DESC;
```
3)根据班号,统计该班学生的不及格的全部信息。
```
SELECT s.student_id,
s.student_name,
c.course_name,
g.grade
FROM student s
JOIN grade g ON s.student_id = g.student_id
JOIN course c ON g.course_id = c.course_id
WHERE s.class_id = 'xxx' AND g.grade < 60
ORDER BY s.student_id, c.course_id;
```
注意:以上代码中的 xxx 部分需要替换成实际的学号、课程号或班号。
阅读全文