我想显示薪水最高的部门名称。
我使用的是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
。但是使用父查询,我得到了上述错误。
问题是什么,可能的解决方案是什么?
答案 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个随机行并对其进行排序(不是真正的最高薪水行......只是任何旧行)
row_number()
代替rank()
来选择一个。