2017-07-27 70 views
-1

对于欧式风格的学校系统,我有一个相当简单的数据库。学校可以有多个班级,教师可以从任何学校分配一个或多个班级。每个学生可以分配一个班级,并且可以为每个分配给班级的教师设置多个等级。SQL查询中的多重嵌套连接

检查天气与否的老师被分配给学生课是在软件内部完成的。

这里是数据库图表:

Database Diagram

我要做的使用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 = ? 

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

那么,我该如何显示一个包含老师姓名,班级以及整个班级平均成绩的表格呢?

任何帮助将不胜感激。

+1

正确设置您的代码。如果全部在一行中,很难阅读。 – Eric

+0

“以及整个班级的平均成绩” - 哪一个? grade_01,grade_02,...? –

+0

请参阅https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查询 – Strawberry

回答

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 
+0

感谢您的回复。我测试了代码,但它给了我每班同样的平均值,所以它给了我平均的教师平均值,而不是平均水平。 –

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 
0

这里的根本问题(和一个我怀疑你是不愿意解决)设计很差之一。

而绝不是一个明确的解决办法,有效的设计可能如下:然后

Teacher, Student, Grade, Score 

平均等级将实时计算的东西。