按照目前湖工大的成绩管理情况,设计成绩管理系统。要求系统可以存储学生基本信息,和课程基本信息,学生选课情况以及课程得分(考试后进行补录)。课程有必修,选修和公选不同类型。各学院学生只能选修该专业的选修课。公选课可以大范围选修。且补考,重修成绩要单独对待。可以根据学分统计发放学位信息。并提供学位信息查询(包括已经发放的学位证查询,以及没有发放的学位,要显示该生还需多少学分,什么类型课程多少学分等提示。)策略分析题目:1)按照学生学号,查询该生所有的课程选择及得分情况,并进行平均分,绩点计算。显示该生三类课程的门数和平均分。(必修,选修和任选课),其中任选课程若不及格不计入。2)按照课程号,查询该课程所有学生的得分情况,并进行平均分,方差等计算。按照成绩进行排序。3)根据班号,统计该班学生的不及格的全部信息。,用sql语言写4)其他未尽事宜,自己补充。
时间: 2024-03-14 07:47:14 浏览: 134
学生成绩管理系统
5星 · 资源好评率100%
针对这个问题,我可以为您提供以下 SQL 语句来实现所需的功能:
1. 按照学生学号查询该生所有的课程选择及得分情况,并进行平均分、绩点计算,并显示该生三类课程的门数和平均分(必修、选修和任选课),其中任选课程若不及格不计入:
```sql
SELECT
s.student_id,
s.student_name,
AVG(c.course_score) AS avg_score,
SUM(CASE WHEN c.course_type = '必修课' THEN 1 ELSE 0 END) AS required_num,
SUM(CASE WHEN c.course_type = '选修课' AND s.major = c.course_major THEN 1 ELSE 0 END) AS elective_num,
SUM(CASE WHEN c.course_type = '公选课' THEN 1 ELSE 0 END) AS public_num
FROM
student s
LEFT JOIN course_selection cs ON s.student_id = cs.student_id
LEFT JOIN course c ON cs.course_id = c.course_id
WHERE
s.student_id = 'xxxxxx'
AND (c.course_score >= 60 OR c.course_type != '任选课')
GROUP BY
s.student_id,
s.student_name;
```
2. 按照课程号查询该课程所有学生的得分情况,并进行平均分、方差等计算,并按照成绩进行排序:
```sql
SELECT
c.course_id,
c.course_name,
AVG(cs.course_score) AS avg_score,
VAR_POP(cs.course_score) AS variance,
FROM
course c
LEFT JOIN course_selection cs ON c.course_id = cs.course_id
WHERE
c.course_id = 'xxxxxx'
GROUP BY
c.course_id,
c.course_name
ORDER BY
cs.course_score DESC;
```
3. 根据班号统计该班学生的不及格的全部信息:
```sql
SELECT
s.student_id,
s.student_name,
c.course_id,
c.course_name,
cs.course_score
FROM
student s
LEFT JOIN course_selection cs ON s.student_id = cs.student_id
LEFT JOIN course c ON cs.course_id = c.course_id
WHERE
s.class_id = 'xxxxxx'
AND cs.course_score < 60;
```
4. 其他未尽事宜,可以根据需要继续补充 SQL 语句,例如:
- 统计每个学院的平均绩点和排名
- 查询某一学期的学生选课情况和课程表
- 统计历年学位授予情况和学位授予率等
阅读全文