2

給与の合計額が最も高い部署名を表示したい。私はOracle SQLを使用しており、テーブル構造はDept(Deptno,Dname,Loc)andEmp(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()必要に応じて、1 つを選択する代わりに使用できますrank()

于 2013-01-24T08:00:26.037 に答える