マイemp表:SQLクエリ会社でトップ5所得者を見つけるために(オラクルDB)
ENAME SAL
---------- ----------
KING 5000
SCOTT 3000
FORD 3000
JONES 2975
BLAKE 2850
CLARK 2450
トップ5 earners.iを取得するためには、以下のクエリを使用していました。
SELECT *
FROM (SELECT ename, sal
from emp
ORDER BY sal desc)
WHERE rownum <= 5
order by sal desc;
が、私はこのような出力を取得しています:このリストで
ENAME SAL
---------- ----------
KING 5000
SCOTT 3000
FORD 3000
JONES 2975
BLAKE 2850
、 'CLARKが' 不足しています。
従業員のCLARKもトップ5に入っています。リストに同じ給与がある場合、私は取得しますか? dense_rankを使用すると、リストに「CLARK」が表示されます。
SELECT * from
(SELECT ename,SAL,DENSE_RANK() OVER(ORDER BY SAL DESC) AS RK FROM EMP)
WHERE RK <= 5
ORDER BY SAL DESC;
ENAME SAL RK
---------- ---------- ----------
KING 5000 1
SCOTT 3000 2
FORD 3000 2
JONES 2975 3
BLAKE 2850 4
CLARK 2450 5
は、私はあなたの出力が正しいことだと思います。 CLARKは、6番目に高い給与従業員です。何の出力が期待されている、質問に言及。 – Siraj
あなたはトップ5を求めていますが、あなたは5を持っています。トップ5の通常の定義にはCLARKは含まれていません(CLARKは5位タイの一部ではないためです)。そしてなぜ 'dense_rank'を使いたいのですか? – Richard
5番目の位置に結び付いているとすれば? – sri