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