对学生课程数据库,编写存储过程,完成下面功能: 1)统计离散数学的成绩分布情况,即按照各分数段统计人数; 2)统计任意一门课的平均成绩。 3)将学生选课成绩从百分制改为等级制(即A、B、C、D、E);
时间: 2023-08-18 21:07:04 浏览: 391
【4/1-14】第五章习题+第八章存储过程
5星 · 资源好评率100%
好的,我可以为您解答这个问题。
首先,需要创建一个存储离散数学成绩的表,可以包含学生ID、成绩等字段。假设表名为"discrete_math_scores"。
1)统计离散数学的成绩分布情况,即按照各分数段统计人数
可以编写如下存储过程:
```
CREATE PROCEDURE sp_discrete_math_scores_distribution
AS
BEGIN
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
WHEN score >= 70 AND score < 80 THEN 'C'
WHEN score >= 60 AND score < 70 THEN 'D'
ELSE 'E'
END AS score_level,
COUNT(*) AS count
FROM discrete_math_scores
GROUP BY
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
WHEN score >= 70 AND score < 80 THEN 'C'
WHEN score >= 60 AND score < 70 THEN 'D'
ELSE 'E'
END;
END
```
上述存储过程会按照分数段统计离散数学成绩的人数,并将结果按照等级(A、B、C、D、E)排序输出。
2)统计任意一门课的平均成绩
可以编写如下存储过程:
```
CREATE PROCEDURE sp_course_average_score
@course_name VARCHAR(50)
AS
BEGIN
SELECT AVG(score) AS average_score
FROM course_scores
WHERE course_name = @course_name;
END
```
上述存储过程会按照传入的课程名称统计该门课程的平均成绩并输出。
3)将学生选课成绩从百分制改为等级制(即A、B、C、D、E)
可以编写如下存储过程:
```
CREATE PROCEDURE sp_change_score_to_grade
AS
BEGIN
UPDATE course_scores
SET grade =
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 AND score < 90 THEN 'B'
WHEN score >= 70 AND score < 80 THEN 'C'
WHEN score >= 60 AND score < 70 THEN 'D'
ELSE 'E'
END;
END
```
上述存储过程会将学生选课成绩从百分制转换为等级制,并将结果更新到表中。
阅读全文