В вашем запросе используется простой агрегат max(basic)
, который позволяет найти самую высокую зарплату.За исключением того, что вам нужно присоединиться к таблице EMP для отображения других деталей.Это означает, что вы не можете использовать агрегирование, потому что нам нужно GROUP BY для неагрегированных столбцов, что сделало бы бессмысленным запрос.
К счастью, мы можем решить проблему с помощью аналитической функции.Подзапрос выбирает всю соответствующую информацию и ранжирует каждого сотрудника по зарплате, причем ранг 1 является самым высокооплачиваемым.Мы используем rank()
здесь, потому что это будет обрабатывать связи: два сотрудника с одинаковым basic
будут в том же ранге.
select empcode
, empname
, nationality
, "Highest Sal"
from (
select emp.empcode
, emp.empname
, emp.nationality
, salary.basic as "Highest Sal"
, rank() over (order by salary.basic desc ) as rnk
from salary join emp on emp.empcode = salary.empcode
)
where rnk = 1;