mysql求选修各门课程的最高、最低与平均成绩。
时间: 2024-05-26 08:10:06 浏览: 149
可以使用MySQL的聚合函数来计算选修各门课程的最高、最低与平均成绩。例如,可以使用 MAX、MIN 和 AVG 函数来计算:
SELECT course_name, MAX(score) AS highest_score, MIN(score) AS lowest_score, AVG(score) AS average_score
FROM student_scores
GROUP BY course_name;
这样就可以得到每门课程的最高、最低与平均成绩。
相关问题
MySQL以数据库user_db及数据表student、teacher、class、course、sc为基础(11)查询选修“数据库原理”的学生的最高成绩、最低成绩、平均成绩; (12)查询平均成绩在60分以上的课程及其平均成绩; (13)查询平均成绩大于“高莉”的平均成绩的学生学号、姓名及平均成绩; (14)查询每门课程中成绩最低的学生的学号、姓名、性别、院系; (15)查询只被一名学生选修的课程的课程号、课程名。
11.
```
SELECT MAX(score) AS max_score, MIN(score) AS min_score, AVG(score) AS avg_score
FROM sc
WHERE course_name = '数据库原理';
```
12.
```
SELECT course_id, course_name, AVG(score) AS avg_score
FROM sc
GROUP BY course_id, course_name
HAVING AVG(score) > 60;
```
13.
```
SELECT s.stu_id, s.stu_name, AVG(score) AS avg_score
FROM student s, sc c
WHERE s.stu_id = c.stu_id
GROUP BY s.stu_id, s.stu_name
HAVING AVG(score) > (SELECT AVG(score) FROM sc WHERE stu_name = '高莉');
```
14.
```
SELECT s.stu_id, s.stu_name, s.gender, s.department, c.course_name, MIN(score) AS min_score
FROM student s, sc c
WHERE s.stu_id = c.stu_id
AND score = (SELECT MIN(score) FROM sc WHERE course_name = c.course_name)
GROUP BY c.course_name, s.stu_id, s.stu_name, s.gender, s.department;
```
15.
```
SELECT course_id, course_name
FROM sc
GROUP BY course_id, course_name
HAVING COUNT(DISTINCT stu_id) = 1;
```
假设有学生-选课数据库,其中有学生表,课程表,教师表,选课表,其结构如下:学生(学号,姓名,专业,入学年份),课程(课程号,课程名,学分),选课(学号,课程号,成绩)。一门课程可以被多名学生选修,一名学生可以选修多门课程。 (1)为了提高各课程的及格率,在统计其成绩之前,将学生成绩分布于55-60之间的均修改为60,再录入学生档案中。(使用触发器完成) (2)对每个学生,统计其获得的最高成绩的课程号。(使用视图完成) (3)任意给定一门课程号,统计其成绩分布,如:最高分,最低分,平均分,各分数段人数;(使用存储过程完成)
好的,我来为您解答。针对您的问题,我分别回答如下:
1. 触发器实现学生成绩修改:
您可以使用如下的触发器来实现对学生成绩的修改:
```mysql
CREATE TRIGGER update_grade
BEFORE INSERT ON 选课
FOR EACH ROW
BEGIN
IF NEW.成绩 >= 55 AND NEW.成绩 < 60 THEN
SET NEW.成绩 = 60;
END IF;
END;
```
这个触发器会在每次插入选课表的数据前触发,如果学生成绩分布在55-60之间,会将其修改为60。
2. 视图统计每个学生获得的最高成绩:
您可以使用如下的视图来实现对每个学生最高成绩的统计:
```mysql
CREATE VIEW max_grade_view AS
SELECT s.学号, s.姓名, MAX(选课.成绩) AS 最高成绩, 选课.课程号
FROM 学生 s, 选课
WHERE s.学号 = 选课.学号
GROUP BY s.学号, 选课.课程号;
```
这个视图会对学生表和选课表进行联合查询,统计每个学生获得的最高成绩及对应的课程号。
3. 存储过程统计指定课程的成绩分布:
您可以使用如下的存储过程来实现对指定课程成绩分布的统计:
```mysql
CREATE PROCEDURE course_grade(IN course_id INT)
BEGIN
SELECT COUNT(*) AS 人数, MAX(成绩) AS 最高分, MIN(成绩) AS 最低分, AVG(成绩) AS 平均分,
CONCAT(FLOOR(成绩/10)*10, '-', FLOOR(成绩/10)*10 + 9) AS 分数段
FROM 选课
WHERE 课程号 = course_id
GROUP BY 分数段;
END;
```
这个存储过程会对选课表进行查询,统计指定课程的成绩分布,包括最高分、最低分、平均分、各分数段的人数等信息。
希望这些回答能够对您有所帮助!
阅读全文