根据子查询显示列

时间:2013-01-24 07:43:00

标签: sql oracle subquery

我想显示薪水最高的部门名称。 我使用的是oracle sql,表结构是Dept(Deptno,Dname,Loc)Emp(Empno,Ename,Job,Salary,Deptno)

我使用的查询是

select Dname 
from Dept 
where Deptno=
      ( select Deptno 
        from Emp 
        where rownum=1 
        group by Deptno 
        order by sum(Salary) Desc
      );

这会出错:

  

右括号缺失。

当我单独运行子查询时,它成功返回Deptno。但是使用父查询,我得到了上述错误。

问题是什么,可能的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

select dname
  from (select dname, rank() over (order by sum(salary) desc) rnk
          from dept d 
               inner join emp e 
                       on e.deptno = d.deptno
        group by dname, e.deptno
       )
 where rnk = 1;

请注意,在您的示例中,将where rownum=1放在您所做的位置是一个巨大的错误。这意味着选择1个随机行并对其进行排序(不是真正的最高薪水行......只是任何旧行)

如果2个公寓有相同的最高工资,我的解决方案可能会超过1行。如果您愿意,可以使用row_number()代替rank()来选择一个。