Ваша проблема в том, что между отделами нет связи.Таким образом, кто-то в отделе B может получить максимальную зарплату в отделе A, но, возможно, не самый высокий заработок в этом отделе.
Для этого подхода я бы рекомендовал корреляционную оговорку в подзапросе, а не GROUP BY
:
select e.emp_name
from employee e
where e.salary = (select max(e2.salary)
from employee e2
where e2.dept_no = e.dept_no
------------------------^ correlation clause
);
Обратите внимание на использование псевдонимов таблиц и квалифицированных имен столбцов.Вы должны всегда квалифицировать все ссылки на таблицы при написании запросов - это гарантирует, что запрос делает то, что вы хотите, и делает запрос более понятным для других.
Если производительность является проблемой, тогдаиспользуйте employee(dept_no, salary)
.