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".