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