我有一个非常简单的欧式学校系统数据库。学校可以有多个班级,教师可以从任何学校分配一个或多个班级。每个学生可以分配一个班级,并且可以从分配给班级的每位教师中获得多个等级。
是否将天气检查分配给学生班级是在软件内部完成的。
这是数据库图表:
我必须使用SQL获取以下报告:
按班级报告成绩:选择一个班级,并列出每个学生的成绩,平均成绩和分配成绩的老师。 (表结构:教师,学生,Grade_01,Grade_02,Grade_03,Grade_04,平均成绩)
按学校报告平均教师成绩:显示包含教师姓名,班级和全班平均成绩的表格。 (表格结构:教师,班级,平均成绩)
我设法做了第一个"按班级报告等级"使用以下SQL代码表:
SELECT grades.grade_id, teachers.teacher_name, students.student_name, grades.grade_01, grades.grade_02, grades.grade_03, grades.grade_04
FROM grades
JOIN teachers
ON teachers.teacher_id = grades.teacher_id
JOIN students
ON students.student_id = grades.student_id
WHERE students.class_id = ?
但我不知道如何制作第二份报告,我已经尝试了无数次......
那么,如何显示一个包含教师姓名,班级和整个班级平均成绩的表格?
非常感谢任何帮助。
答案 0 :(得分:0)
select
teacher_name as 'Teacher',
class_name as 'Class',
avg(grade_01 + grade_02 + grade_03 + grade_04) as 'Average Grade' from teachers
join class_teacher on teachers.teacher_id = class_teacher.teacher_id
join clases on clases.class_id = class_teacher.class_id
join grades on grades.teacher_id = teachers.teacher_id
group by teacher_name, class_name
答案 1 :(得分:0)
感谢您的回答AnumR
我修改了您提供的代码,以便您可以按学校ID选择教师和班级。
但是代码按老师而不是按班级输出平均值。
SELECT teacher_name AS 'Teacher', class_name AS 'Class',
AVG(grade_01 + grade_02 + grade_03 + grade_04)/4 AS 'Average Grade' FROM teachers
JOIN class_teacher ON teachers.teacher_id = class_teacher.teacher_id
JOIN clases ON clases.class_id = class_teacher.class_id
JOIN grades ON grades.teacher_id = teachers.teacher_id
WHERE clases.school_id = 2
GROUP BY teacher_name, class_name
答案 2 :(得分:0)
这里的根本问题(我怀疑你不愿意解决这个问题)是一个糟糕的设计。
虽然决不是最终的解决方案,但有效的设计可能如下:
Teacher, Student, Grade, Score
平均成绩将是即时计算的。