"FROM" 句で定義されたインライン ビューを WHERE 句のサブクエリから参照することはできますか?
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' が存在しません」というエラーが表示されます。これはOracleで何とか可能ですか?
これが私のスキーマの例です:
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)
);
(下手な英語でごめんなさい)