SQL查询中的多个嵌套连接

时间:2017-07-27 18:41:55

标签: mysql sql database join nested

我有一个非常简单的欧式学校系统数据库。学校可以有多个班级,教师可以从任何学校分配一个或多个班级。每个学生可以分配一个班级,并且可以从分配给班级的每位教师中获得多个等级。

是否将天气检查分配给学生班级是在软件内部完成的。

这是数据库图表:

Database Diagram

我必须使用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 = ?

但我不知道如何制作第二份报告,我已经尝试了无数次......

那么,如何显示一个包含教师姓名,班级和整个班级平均成绩的表格?

非常感谢任何帮助。

3 个答案:

答案 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

平均成绩将是即时计算的。