我想基于子查询显示表的一些列

时间:2013-01-24 07:14:49

标签: sql subquery

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

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

这会产生错误,说明"单行子查询返回多行" 。 我究竟做错了什么?该怎么做才能纠正它?

1 个答案:

答案 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