Sql 基于子查询显示列
我想显示工资总额最高的部门名称。 我使用的是oracle sql,表结构是Sql 基于子查询显示列,sql,oracle,subquery,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 s
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
。但是对于父查询,我得到了上面的错误
问题是什么?可能的解决方案是什么
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;
注意,在您的示例中,将rownum=1放入是一个巨大的错误。这意味着选择一个随机行并对其进行排序(不是真正的最高工资行..只是任何旧行)
如果两个部门的最高工资相同,我的解决方案可能会超过一行。您可以使用row\u number()
而不是rank()
来选择一个