ORACLE SQL Вторая максимальная зарплата

Как найти Второй максимальный оклад, полученный сотрудником из таблицы "Сотрудники". Можно ли найти его через функцию ROWNUM.

пример таблицы:

S.no    Name       employee_id     salary
201     Steven        100            1000
202     Alexander     101            2500 
203     Daniel        102            5000
204     John          103            3000
205     Ishanth       104            8000 

5 ответов

Поскольку вы упомянули вторую по величине зарплату, вы должны использовать DENSE_RANK вместо ROW_NUMBER если есть два сотрудника с одинаково наибольшим значением, которые по ошибке дадут вам самую высокую зарплату, даже если вы дадите WHERE ROW_NUMBER = 2 состояние.

SELECT A.S_NO, A.NAME, A.EMPLOYEE_ID, A.SALARY
FROM
    (SELECT S_NO, NAME, EMPLOYEE_ID, SALARY, 
     DENSE_RANK() OVER (ORDER BY SALARY DESC) AS SALARY_RANK) A
WHERE A.SALARY_RANK = 2;

Я думаю, вы можете использовать функцию Nth_Value здесь. Пожалуйста, обратитесь к https://docs.oracle.com/cloud/latest/db112/SQLRF/functions114.htm для синтаксиса

select distinct 
nth_value(salary,2) OVER (ORDER BY salary desc range between unbounded preceding and unbounded following) as secondVal 
from HR.EMPLOYEES;

Другой вариант, использует функцию DENSE_RANK следующим образом

with cte as (
    select salary, dense_rank() over (order by salary desc) as nth_salary from Employee
)
select salary from cte 
where 
    nth_salary = 2;

Вот вывод

Попробуй это

SELECT salary FROM (SELECT DISTINCT salary FROM Employees  ORDER BY salary 
DESC) WHERE ROWNUM=2;

Куда,

  • salary Имя столбца
  • Employees это имя таблицы

или же

Самый простой способ получить вторую максимальную зарплату и n-ую зарплату

select 
 DISTINCT(salary) 
from Employees 
 order by salary desc 
limit 1,1

Замечания:

limit 0,1  - Top max salary

limit 1,1  - Second max salary

limit 2,1  - Third max salary

limit 3,1  - Fourth max salary

Обновление для оракула

SELECT salary FROM (
    SELECT salary, row_number() OVER (order by salary desc) AS rn FROM Employees
)
WHERE rn = 2

Используйте общий запрос для максимальной зарплаты:

select salary from table_name order by salary desc limit n-1,1;

Вместо того, чтобы использовать ROWNUM . Вы можете легко найти 'n' -й оклад по

SELECT *
  FROM (
  SELECT DISTINCT  salary 
  FROM Employees
  ORDER BY salary DESC limit 2
  ) a
ORDER BY a.salary limit 1

Здесь вместо "2" вы можете указать любое требуемое значение "n".

Другие вопросы по тегам