【问题标题】:Display columns based on sub query基于子查询显示列
【发布时间】:2013-01-24 07:43:00
【问题描述】:

我想显示工资总和最高的部门名称。 我用的是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。但是对于父查询,我得到了上述错误。

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

【问题讨论】:

    标签: sql oracle subquery


    【解决方案1】:
    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() 来选择一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      相关资源
      最近更新 更多