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