Я предлагаю вам использовать другую логику для построения ваших запросов.Вот демонстрация для первого запроса;После этого вы сможете создать второй запрос (и, возможно, опубликовать его как ответ?).
Начните с составного запроса, который вычисляет количество учителей на идентификатор инструктора, глядя натаблица Teaches
:
SELECT i_id, COUNT(*) cnt FROM Teaches GROUP BY i_id
Затем ранжируйте каждую запись по убыванию количества, используя оконную функцию ROW_NUMBER()
:
SELECT i_id, cnt, ROW_NUMBER() OVER(ORDER BY cnt DESC) rn
FROM (SELECT i_id, COUNT(*) cnt FROM Teaches GROUP BY i_id) t
Все, что осталось сделать, - это получить имя инструктора(JOIN ON Instructor
) и отфильтруйте в верхних 4 записях
SELECT i.name InstructorName, x.cnt NumberOfCoursesTaught
FROM (
SELECT i_id, cnt, ROW_NUMBER() OVER(ORDER BY cnt DESC) rn
FROM (SELECT i_id, COUNT(*) cnt FROM Teaches GROUP BY i_id) t
) x
INNER JOIN Instructor i ON i.i_id = x.i_id
WHERE x.rn <= 4
ORDER BY x.cnt desc