我想显示在同一个表格中获得部门最高工资的员工的部门编号,姓名和工资。
我正在使用oracle sql。我正在使用的表结构是
Emp(Empno,Ename,Job,Salary,Deptno)
我已经读过这个,我认为这可以通过使用相关的子查询来完成。我解雇的查询是
select E1.Ename,E1.Ename,E1.Salary
from Emp E1
where E1.Empno=(
select Empno
from Emp E2
where Salary=(
select max(Salary)
from Emp
where Deptno=E1.Deptno
)
);
这会产生错误,说明"单行子查询返回多行" 。 我究竟做错了什么?该怎么做才能纠正它?
答案 0 :(得分:2)
SELECT EmpNo, Ename,Job,Salary,Deptno
FROM
(
SELECT EmpNo, Ename,Job,Salary,Deptno,
DENSE_RANK() OVER (PARTITION BY DeptNo
ORDER BY Salary DESC ) rn
FROM Emp
) a
WHERE a.rn = 1
或使用MAX
SELECT a.*
FROM Emp a
INNER JOIN
(
SELECT DeptNo, MAX(Salary) Max_sal
FROM Emp
GROUP BY DeptNo
) b ON a.DeptNo = b.DeptNo AND
a.Salary = b.Max_SAL