2017-07-27 67 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 

平均等級將實時計算的東西。