0

テーブルから多数 (たとえば 12 人) の従業員の給与よりも多い従業員の給与を選択したい場合はどうすればよいでしょうか。サブクエリを使用する必要があることはわかっていますが、次のように記述します:-

Select ename,salary 
from emp 
where salary>( select salary
            from emp
           where ename='A'||ename='B'.....)

そのように書くこともできますが、それは良いアプローチではありません。それに役立つクエリを提案してください。

4

4 に答える 4

1

12人の従業員を知っている場合は、クエリを次のように記述したいと思います。

Select ename,salary 
from emp 
where salary> (select max(salary)
               from emp
               where ename in ('A', 'B', . . . )
              )

INor一連のステートメントよりもはるかに便利です。また、サブクエリは1つの値、つまり最大給与を返す必要があります。

于 2013-03-03T18:17:40.177 に答える
1
Select ename,salary 
from emp 
where salary > (
    select salary 
    from 
        (
        select 
           salary, 
           rownum as rn
        from emp
        order by salary
        )
    where rn = 12
)
于 2013-03-03T18:09:41.320 に答える
0

これは使用できる正確なコードではありませんが、役立つはずです。

RANK()関数を使用できます。

oracle-base.comの記事の例:

SELECT empno,
       deptno,
       sal,
       RANK() OVER (PARTITION BY deptno ORDER BY sal) "rank"
FROM   emp;

     EMPNO     DEPTNO        SAL       rank
---------- ---------- ---------- ----------
      7934         10       1300          1
      7782         10       2450          2
      7839         10       5000          3
      7369         20        800          1
      7876         20       1100          2
      7566         20       2975          3
      7788         20       3000          4
      7902         20       3000          4
      7900         30        950          1
      7654         30       1250          2
      7521         30       1250          2
      7844         30       1500          4
      7499         30       1600          5
      7698         30       2850          6
于 2013-03-03T17:52:49.500 に答える
0

あなたの要件には 2 つの異なる解釈があります。

1. 他の (ランダムな) 従業員 12 人以上の従業員の収入

2.特定従業員12人以上が稼いでいるもの

このクエリは最初の要件を解決しますが、大規模なデータセットでは非常に遅くなります。

select *
  from emp a
 where 12 = (select count(*) 
               from emp b 
              where b.salary < a.salary); 

このクエリは 2 番目の要件を解決します

select * 
  from emp
 where salary > all(select salary 
                      from emp 
                     where emp_id in(1,2,3,4,5)
                   )
于 2013-03-03T18:29:50.400 に答える