我正在处理一个问题,使用SQL Oracle。出于某种原因,我得到了13个教学结果的教学结果,当时我应该只有1个。只有1个教练只能在那个教室里教3个或更多的学生。
问题:
创建一个查询,以确定在L211室教授的课程中教授3名以上学生的教师人数。
我的代码:
SELECT COUNT(Instructor_Id) AS NumberOfInstructors
FROM Section s, Enrollment e
WHERE s.Section_Id = e.Section_Id
AND Location = 'L211'
HAVING COUNT(Student_Id) =
(SELECT COUNT(Student_iD)
FROM Section s, Enrollment e
WHERE s.Section_Id = e.Section_Id
AND Location = 'L211')
ORDER BY s.Course_No;
我的结果:
NUMBEROFINSTRUCTORS
-------------------
13
预期结果:
NUMBEROFINSTRUCTORS
-------------------
1
所以我觉得我可能没有朝着正确的方向前进,但我觉得它正在增加在该课程中教授的所有教师。如果有人能指出我正确的方向,那么我已经用我已经给出的代码搞砸了很多。我猜我需要计算一下那些已经上过那个房间号的学生,我想我已经尝试了这个并得到了4的结果,所以我不确定。
任何帮助都会很棒,here is the Schema。
DBMS:我使用的是Oracle SQL Developer
答案 0 :(得分:1)
试试这个:
SELECT COUNT(*) NumberOfInstructors
From (Select Instructor_Id
FROM Section s
join Enrollment e
on e.Section_Id = s.Section_Id
WHERE s.Location = 'L211'
Group By Instructor_Id
HAVING COUNT(Student_Id) >= 3) Z
答案 1 :(得分:0)
我认为你需要一个子查询。在伪代码中,您正在寻找类似的查询:
SELECT count(teachers)
FROM
(SELECT count(students) FROM enrollment where location='L211') AS "numberofstudents"
WHERE numberofstudents > 3
答案 2 :(得分:0)
我没有测试代码,但在我看来你错过了一个条件。您的问题要求您找到“在该房间只教3个或更多学生的教师”,但您没有任何条件来检查学生编号>试试这个:
SELECT COUNT(Instructor_Id) AS NumberOfInstructors
FROM Section s, Enrollment e
WHERE s.Section_Id = e.Section_Id
AND Location = 'L211'
HAVING COUNT(Student_Id) =
(SELECT COUNT(Student_iD)
FROM Section s, Enrollment e
WHERE s.Section_Id = e.Section_Id
AND Location = 'L211' AND COUNT(Student_Id) > 3)
ORDER BY s.Course_No;