Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询中的多个嵌套联接_Mysql_Sql_Database_Join_Nested - Fatal编程技术网

Mysql SQL查询中的多个嵌套联接

Mysql SQL查询中的多个嵌套联接,mysql,sql,database,join,nested,Mysql,Sql,Database,Join,Nested,我有一个相当简单的数据库,用于欧洲风格的学校系统。一所学校可以有多个班级,教师可以从任何学校分配一个或多个班级。每个学生可以分配一个班级,每个老师可以给班级分配多个分数 教师是否分配给学生班级的天气检查是在软件本身内部完成的 以下是数据库关系图: 我必须使用SQL返回以下报告: 按班级报告成绩:选择一个班级,并在表格中列出每个学生的成绩、平均成绩和分配成绩的老师。(表结构:教师、学生、01年级、02年级、03年级、04年级、平均年级) 按学校报告平均教师成绩:显示包含教师姓名、班级和全班平均

我有一个相当简单的数据库,用于欧洲风格的学校系统。一所学校可以有多个班级,教师可以从任何学校分配一个或多个班级。每个学生可以分配一个班级,每个老师可以给班级分配多个分数

教师是否分配给学生班级的天气检查是在软件本身内部完成的

以下是数据库关系图:

我必须使用SQL返回以下报告:

  • 按班级报告成绩:选择一个班级,并在表格中列出每个学生的成绩、平均成绩和分配成绩的老师。(表结构:教师、学生、01年级、02年级、03年级、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 = ?
但我不知道如何生成第二份报告,我已经尝试了无数次


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


非常感谢您的帮助。

谢谢您的回答

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
我已经修改了您提供的代码,以便您可以根据学校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

这里最根本的问题(我怀疑你不愿意解决的问题)是糟糕的设计

虽然并非最终解决方案,但有效的设计可能如下所示:

Teacher, Student, Grade, Score

然后,平均成绩将是动态计算的。

正确设置代码格式。如果是一行的话,很难读懂。“全班的平均成绩是多少”-哪一个?01级、02级?谢谢你,埃里克。所有4个年级的平均值,平均值(grade_01)和其他3个。加入所有相关表格,并按班级和老师分组。感谢回复。我测试了代码,但它给了我每个班级相同的平均值,所以它给了我老师的平均值,而不是班级的平均值。