Oracle SQL - Как получить отдельные строки с помощью аналитической функции RANK () или DENSE_RANK () или ROW_NUMBER ()?

Я ищу, чтобы получить лучшие 3 отличных зарплаты каждого отдела. Я смог сделать это либо с помощьюRANK() или жеDENSE_RANK() или жеROW_NUMBER() но в моей таблице есть записи с одинаковыми зарплатами.

Упомянутый ниже мой запрос и его результат.

Верхние 3 зарплаты отдела 20 должны быть 6000, 3000, 2975. Но есть 2 сотрудника с зарплатой 3000, и оба имеют ранг 2. Таким образом, это дает мне 4 записи для этого отдела (1 для ранга 1, 2 записи для ранг 2 и 1 запись для ранг3).

Пожалуйста, предложите / посоветуйте о том, как можно получить отличные 3 верхних зарплаты для каждого отдела

Запрос:
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;
РЕЗУЛЬТАТ:
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

Ответы на вопрос(3)

Ваш ответ на вопрос