对学生-课程数据库编写存储过程,统计任意一门课的平均成绩
时间: 2024-05-24 10:14:32 浏览: 246
好的,我可以为您提供一些编写存储过程的思路。首先,您需要创建一个包含学生、课程和成绩信息的数据库表。然后,您可以编写一个存储过程,该过程接收课程名称作为参数,并从表中获取该课程的所有成绩。接下来,您可以使用 AVG 函数计算这些成绩的平均值,并将此结果返回给调用方。
以下是一个示例存储过程的代码:
CREATE PROCEDURE GetAvgGradeByCourseName
@CourseName NVARCHAR(50)
AS
BEGIN
SELECT AVG(Grade) AS AvgGrade
FROM StudentCourseGrades
WHERE CourseName = @CourseName
END
请注意,此代码仅用于演示目的。您需要根据自己的数据库结构和需求进行适当修改。
相关问题
对学生-课程数据库编写存储过程,完成下述功能:(1)统计离散数学的成绩分布情况,即按照各分数段统计人数(2)统计任意一门课的平均成绩(3)将学生选课成绩从百分制改为等级制(A、B、C、D、E)
以下是对应的三个存储过程:
1. 统计离散数学的成绩分布情况
```
CREATE PROCEDURE `DiscreteMathScoreDistribution`()
BEGIN
SELECT '90-100' AS 'Score Range', COUNT(*) AS 'Number of Students'
FROM student_course
WHERE course_id = 'MATH101' AND score >= 90 AND score <= 100
UNION
SELECT '80-89', COUNT(*)
FROM student_course
WHERE course_id = 'MATH101' AND score >= 80 AND score < 90
UNION
SELECT '70-79', COUNT(*)
FROM student_course
WHERE course_id = 'MATH101' AND score >= 70 AND score < 80
UNION
SELECT '60-69', COUNT(*)
FROM student_course
WHERE course_id = 'MATH101' AND score >= 60 AND score < 70
UNION
SELECT '0-59', COUNT(*)
FROM student_course
WHERE course_id = 'MATH101' AND score >= 0 AND score < 60;
END
```
2. 统计任意一门课的平均成绩
```
CREATE PROCEDURE `CourseAvgScore`(IN courseID VARCHAR(10))
BEGIN
SELECT AVG(score) AS 'Average Score'
FROM student_course
WHERE course_id = courseID;
END
```
3. 将学生选课成绩从百分制改为等级制
```
CREATE PROCEDURE `ConvertToGradeScore`()
BEGIN
UPDATE student_course
SET score =
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
```
注意事项:
- 第一个存储过程中的 course_id = 'MATH101' 需要改为对应需要统计的课程ID
- 第二个存储过程中的 IN courseID 可以改为任意需要统计平均成绩的课程ID
- 第三个存储过程将原来的分数覆盖为等级,需要谨慎操作,并且要确保该过程只执行一次。
对学生-课程数据库编写存储过程,完成下述功能:(1)统计离散数学的成绩分布情况,即按照各分数段统计人数。(2)统计任意一门课的平均成绩。(3)将学生选课成绩从百分制改为等级制(即A、B、C、D、E)
好的,针对你的问题,我来依次回答:
(1) 统计离散数学的成绩分布情况,即按照各分数段统计人数:
```sql
CREATE PROCEDURE score_distribution()
BEGIN
SELECT COUNT(*) AS num,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'E'
END AS grade
FROM student_course
WHERE course_name = '离散数学'
GROUP BY grade;
END;
```
(2) 统计任意一门课的平均成绩:
```sql
CREATE PROCEDURE average_score(IN course VARCHAR(20))
BEGIN
SELECT AVG(score) AS avg_score
FROM student_course
WHERE course_name = course;
END;
```
(3) 将学生选课成绩从百分制改为等级制(即A、B、C、D、E):
```sql
CREATE PROCEDURE score_grade_trans()
BEGIN
UPDATE student_course
SET grade =
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
WHEN score >= 60 THEN 'D'
ELSE 'E'
END;
END;
```
希望这些存储过程能够帮助你完成你的数据库操作。如果你还有其他问题,可以随时问我。
阅读全文