如何获取员工中每个部门的最高薪水?

时间:2019-07-08 01:09:48

标签: sql sql-server select rank

我正在尝试编译一个查询,该查询为我提供了每个部门和每个唯一员工的最高薪水。复杂性是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 个答案:

答案 0 :(得分:1)

对于一名员工,您似乎只想包括薪水最低的部门。我建议使用窗口功能:

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;

答案 1 :(得分:0)

像这样吗?

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;