Вывести максимальную зарплату в каждом городе
Есть запрос в котором нужно вывести максимальную зарплату в каждом городе, причем сотрудники и города находятся в разных таблицах.
Собственно сами таблицы:
У меня были попытки написать запрос но в запросе чего то не хватает, не могу понять чего.
select ename,deptno, sal
from (
select ename, deptno, sal, rank() over(partition by deptno order by sal desc) n_rank
from emp natural join (select distinct loc, deptno from dept))
where n_rank = 1;
А проблема в том что не могу вместо deptno вывести название города.
Ответы (2 шт):
Если нужно просто вывести город и максимальную зарплату в нём, используйте обычную группировку:
select LOC, max(SAL) as MAX_SALARY
from emp
inner join dept on dept.DEPTNO = emp.DEPTNO
group by LOC
Если нужно вывести данные по каждому сотруднику и в дополнение указать, какая максимальная зп в его городе, можно использовать такой вариант:
select
e.ename,
e.deptno,
e.sal,
d.loc,
max(e.sal) over(partition by loc) as max_salary
from emp e
inner join dept d on d.deptno = e.deptno;
Вот так пoлучить список всех сотрудников, получающих топовый заработок в своём городе:
select ename, city, salary
from (
select first_name||' '||last_name ename, l.city, salary,
max (salary) keep (
dense_rank first order by e.salary) over (partition by city) sitytopsal
from hr.employees e
join hr.departments d on d.department_id = e.department_id
join hr.locations l on l.location_id = d.location_id
) where salary = sitytopsal order by salary desc
/
Результат:
ENAME CITY SALARY
---------------- ------------------------ ----------
Hermann Baer Munich 10000
Susan Mavris London 6500
Sundita Kumar Oxford 6100
Pat Fay Toronto 6000
Diana Lorentz Southlake 4200
Karen Colmenares Seattle 2500
TJ Olson South San Francisco 2100
PS В примере использована стандартная схема примеров HR.

