Я думаю, что проблема с вашим первым запросом состоит в том, что вы предполагаете, что учителя всегда преподают один и тот же класс в каждом семестре, но это не то, что показывают данные - поэтому два разных учителя учили CS-101, но вы рассчитываетевсе студенты по отношению к обоим учителям.При объединении двух таблиц вы, вероятно, захотите объединить столько столбцов первичного ключа, сколько сможете, а не только один из них.
Попробуйте это:
SELECT Instructor.i_id, Instructor.name, COUNT(Takes.s_id) AS totalEnrollment
FROM Instructor
INNER JOIN Teaches ON Instructor.i_id = Teaches.i_id
INNER JOIN Takes ON Takes.course_id = Teaches.course_id
AND Takes.sec_id = Teaches.sec_id -- added these 3 columnss
AND Takes.semester = Teaches.semester
AND Takes.year = Teaches.year
Group by Instructor.i_id, Instructor.name
ORDER BY totalEnrollment DESC;
Для второгозапрос, вам нужно использовать псевдоним, когда вы присоединяетесь к одной и той же таблице дважды, а также вы ничего не сделали, чтобы проверить, «предложен ли другой отдел».
SELECT Course.course_id, Course.dept_name, Prereq.prereq_id, c2.dept_name
FROM Course
INNER JOIN Prereq
ON Course.course_id = Prereq.course_id
INNER JOIN Course c2 -- alias
ON c2.course_id = Prereq.prereq_id
AND c2.dept_name <> Course.dept_name -- prereq department is different
Order by Course.course_id ASC;
Дайте мне знать, если еще естьпроблема с этим.