Oracle SQL - Comment obtenir des lignes distinctes à l'aide de RANG() ou DENSE_RANK() ou la fonction ROW_NUMBER() analyse de la fonction?

Je suis à la recherche pour obtenir le top 3 des salaires de chaque département. J'ai été en mesure de le faire soit à l'aide de RANK() ou DENSE_RANK() ou ROW_NUMBER() mais mon tableau est d'avoir quelques enregistrements avec le même salaire.

Mentionnés ci-dessous est ma requête et de son résultat.

Le top 3 des salaires de Dept 20 6000, 3000, 2975.
Mais il y a 2 employés avec un salaire de 3000 et tous les deux ont le rang 2. Donc, c'est de me donner 4 enregistrements pour ce département (1 pour le rang 1, 2 enregistrements de rang2 et 1 record pour rank3).

Veuillez indiquer, le/la conseiller sur comment obtenir les différents top 3 des salaires pour chaque département.

Requête:

SELECT * FROM (
SELECT EMPNO, DEPTNO, SAL, 
DENSE_RANK() over (partition by deptno order by sal DESC) as RANK,
row_number() over (partition by deptno order by sal DESC) as ROWNO
from EMP)
WHERE RANK <= 3;

RÉSULTAT:

Empno Deptno    Salary Rank   Rowno
---------------------------------------- 
7839    10      5000    1      1
7782    10      2450    2      2
7934    10      1300    3      3
7935    20      6000    1      1
7788    20      3000    2      2
7902    20      3000    2      3
7566    20      2975    3      4
7698    30      2850    1      1
7499    30      1600    2      2
7844    30      1500    3      3

OriginalL'auteur Rakesh | 2014-05-04