在经理下找到第一高薪员工

时间:2019-06-19 18:10:53

标签: sql oracle

在员工表中数据存储如下

Empno ename  salary manager

1     prasad 100    4
2     durga  200    4
3     ggggg  200    4
4     jjjjj  300    6
5     kkkkk  600    6
6     dddddd 700    7

我需要找出经理职位下第一高薪的员工。

我的sql代码和输出:

select * from employee where salary in
         (select max(salary) from employee group by manager);

输出:

Empno ename  salary manager

2     durga  200    4
3     ggggg  200    4
5     kkkkk  600    6
6     dddddd 700    7

期望的输出应该是:

2     durga  200    4
5     kkkkk  600    6
6     dddddd 700    7

因为薪水“ 200”对于两名雇员显示两次。我的要求是仅在经理下显示第一高薪员工。

任何人都可以为我的预期输出建议sql查询。预先感谢

3 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER窗口功能。例如:

select 
  empno, ename, salary, manager
from (
  select *, 
    row_number() over(partition by manager order by salary desc, ename) as rn
  from employee
) x where rn = 1

答案 1 :(得分:1)

尝试此查询:

SELECT ename, manager, MAX(salary) FROM employee GROUP BY manager;

实时示例:


编辑: Oracle数据库

SELECT manager, MAX(salary) FROM employee GROUP BY manager;

答案 2 :(得分:0)

使用相关子查询,而不要使用group by

select e.*
from employee e
where e.salary = (select max(e2.salary)
                  from employee e2
                  where e2.manager = e.manager
                 );

您的问题是,一位经理的最高薪水可能是其他人的薪水,而不是该经理的最高薪水。