2

我想显示工资总和最高的部门名称。我正在使用 oracle sql,表结构是Dept(Deptno,Dname,Loc)and 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. 但是对于父查询,我得到了上述错误。

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

4

1 回答 1

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()只选择一个。

于 2013-01-24T08:00:26.037 回答