Как получить самую высокую зарплату для каждого отдела среди сотрудников? - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь составить запрос, который дает мне самую высокую зарплату для каждого отдела и для каждого уникального сотрудника.Сложность в том, что 1 сотрудник может входить в несколько отделов.

В случае, если один и тот же работник имеет самую высокую зарплату в нескольких департаментах, должен отображаться только департамент с более низкой зарплатой.Это мой старт, но я не уверен, как продолжить отсюда:

select max(salary) as salary, dd.dept_name,d.emp_no
from salaries s
inner join dept_emp d on
s.emp_no=d.emp_no 
inner join departments dd on
d.dept_no=dd.dept_no
group by 2,3;

Мой вывод:
enter image description here

Что я должен изменитьотсюда?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Для работника вы, похоже, хотите включить только отдел с наименьшей зарплатой.Я бы порекомендовал использовать оконные функции:

select s.*
from (select s.*,
             rank() over (partition by dept_name order by salary desc) as seqnum_d
      from (select s.*, d.dept_name,
                   rank() over (partition by dept_name order by salary) as seqnum_ed
            from salaries s join
                 dept_emp d
                 on s.emp_no = d.emp_no join
                 departments dd 
                 d.dept_no = dd.dept_no
           ) s
      where seqnum_ed = 1
     ) s
where seqnum_d = 1;
0 голосов
/ 08 июля 2019

Как то так?

select m.salary, m.emp_no, salary.dept_name from salary,
(select emp_no, min(salary) salary from salary group by emp_no) m
where
m.emp_no=salary.emp_no and m.salary=salary.salary;
...