在员工表中数据存储如下
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查询。预先感谢
答案 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
);
您的问题是,一位经理的最高薪水可能是其他人的薪水,而不是该经理的最高薪水。