我很难理解创建视图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