Мне нужно отображать 2-ую самую высокую зарплату для каждого отдела, если работник имеет одинаковую зарплату, то отображает зарплату с наименьшим значением empno
.
У меня есть таблица emp
, как показано ниже, в которой deptno
20 имеют 2-ую наивысшую зарплату 3000 на двоих empno
7788 и 7902.
EMPNO ENAME JOB SAL DEPTNO
7698 BLAKE MANAGER 2850 30
7844 TURNER SALESMAN 1500 30
7499 ALLEN SALESMAN 1600 30
7654 MARTIN SALESMAN 1250 30
7521 WARD SALESMAN 1250 30
7900 JAMES CLERK 950 30
7788 SCOTT ANALYST 3000 20
7566 JONES MANAGER 2975 20
7369 SMITH CLERK 25000 20
7876 ADAMS CLERK 1100 20
7902 FORD ANALYST 3000 20
7839 KING PRESIDENT 5000 10
7934 MILLER CLERK 1300 10
7782 CLARK MANAGER 2450 10
Я написал ниже код:
select * from (
select e.*, row_number() over (partition by deptno order by sal desc ) rn
from emp e
)where rn = 2;
Я получил ниже результат. Но согласно моему требованию, если какой-либо сотрудник имеет одинаковую зарплату для этого отдела, то должна отображаться зарплата с наименьшим идентификатором сотрудника, но в моем случае отображается empno 7902. Но мне нужно отобразить зарплату с empno 7788:
EMPNO ENAME JOB SAL DEPTNO
7782 CLARK MANAGER 2450 10
7902 FORD ANALYST 3000 20
7499 ALLEN SALESMAN 1600 30
Как этого добиться?