是否可以从 WHERE 子句的子查询中引用“FROM”子句中定义的内联视图?
SELECT tmp.TeacherName,
tmp.courseid,
tmp.AvgAttendingStudents
FROM (SELECT T.TeacherID AS ID,
T.TeacherName AS Name,
C.CourseID AS CourseID,
avg(L.AttendingStudents) AS AvgAttendingStudents
FROM Teachers AS T
join Courses AS C
ON C.TeacherID = T.TeacherID
join Lessons AS L
ON L.CourseID = C.CourseID
GROUP BY T.TeacherID,
C.CourseID) AS tmp
WHERE tmp.AvgAttendingStudents = (SELECT max(AvgAttendingStudents)
FROM tmp AS tmp2
WHERE tmp2.TeacherID = tmp.TeacherID);
在这个例子中,我试图列出所有的老师,对于他们每个人,我想展示具有最高平均参加学生的课程(根据所有课程计算)。我尝试使用内联视图 (tmp) 来计算每门课程的平均参加学生人数,但我不知道是否可以在子查询 SELECT max(...) 中引用该视图。我需要它来使用 Oracle,但不幸的是,目前我没有任何 Oracle 数据库可以尝试。我尝试使用 MySQL(因为我认为我没有使用任何特定于 Oracle 的功能),但正如预期的那样,我收到错误“表 'db.tmp' 不存在”。甲骨文有可能吗?
这是我的示例架构:
CREATE TABLE Courses
(
CourseID INTEGER PRIMARY KEY,
CourseName VARCHAR(32),
TeacherID INTEGER
);
CREATE TABLE Teachers
(
TeacherID INTEGER PRIMARY KEY,
TeacherName VARCHAR(32)
);
CREATE TABLE Lessons
(
LessonDate TIMESTAMP,
CourseID INTEGER,
AttendingStudents INTEGER,
PRIMARY KEY (LessonDate, CourseID)
);
(对不起,我的英语不好)