我很難理解創建視圖TRANSCRIPTVIEW如何設置0的等級爲沒有參加課程的人。解釋會有所幫助,解決方案和問題在下面。謝謝。不能理解這個視圖在SQL中的工作原理
學生(ID,姓名) 成績單(StudId,CourseName,學期級)
制定在SQL下面的查詢: 創建所有的學生名單(ID,姓名),對於每一個學生,列出S2002學期所採取課程的平均成績。 請注意,在S2002中可能會有學生沒有參加任何課程。對於這些,平均等級應該被列爲0. 解決方案: 我們首先創建一個視圖,用行填充行,將每個學生註冊爲0級的零課程。因此,在學期內沒有參加任何活動的學生'S2002'的這個學期的平均成績爲0。
以下是我困惑,這是如何工作,爲什麼它的工作?
CREATE VIEW TRANSCRIPTVIEW AS (
(SELECT * FROM Transcipt)
UNION
(
SELECT S.Id,NULL,’S2002’,0
FROM Student S)
WHERE S.Id NOT IN (
SELECT T.StudId
FROM Transcript T
WHERE T.Semester = ’S2002’))
)
Remaining solution:
SELECT S.Id, S.Name, AVG(T.Grade)
FROM Student S, TRANSCRIPTVIEW T
WHERE S.Id = T.StudId AND T.Semester = ’S2002’ GROUP BY S.Id
表成績單必須包含4個領域。如果有人要添加第五名,這將打破。第一個選擇是獲取所有成績單。第二個選擇是讓所有沒有記錄的學生在S2002學期的成績單中給他們分配第四個列值爲0和課程名稱爲null – xQbert 2013-03-22 18:04:27