0

我想显示在同一个表中的部门中获得最高薪水的员工的部门编号、姓名和薪水。

我正在使用 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
                           )
                );

这给出了一个错误,说“单行子查询返回多行”。我究竟做错了什么?应该怎么做才能纠正?

4

1 回答 1

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
于 2013-01-24T07:17:02.060 回答