Как получить n-ую самую высокую зарплату из таблицы без использования TOP и подзапроса? - PullRequest
8 голосов
/ 05 сентября 2010

Недавно в одном из интервью меня попросили написать запрос, в котором я должен был получить n-ю самую высокую зарплату из таблицы без использования TOP и каких-либо подзапросов?

Я был совершенно сбит с толку, как единственный известный мне способ.для его реализации используются как TOP, так и подзапрос.

Пожалуйста, предоставьте свое решение.

Заранее спасибо.

Ответы [ 15 ]

0 голосов
/ 01 апреля 2018

Чтобы найти N-ую самую высокую зарплату, мы рассматриваем только уникальную заработную плату. Самая высокая зарплата означает, что ни одна зарплата не превышает ее, Вторая самая высокая означает, что только одна зарплата выше ее, 3-я самая высокая означает, что две зарплаты выше ее, аналогично, N-я самая высокая зарплата означает, что N-1 зарплаты выше, чем она. Ну, вы можете сделать это, используя ключевое слово LIMIT , которое обеспечивает разбиение на страницы Возможности. Вы можете сделать как ниже:

SELECT salary FROM Employee ORDER BY salary DESC LIMIT N-1, 1 

Пример: 2-я самая высокая зарплата в MySQL без подзапроса:

SELECT salary FROM Employee ORDER BY salary DESC LIMIT 1,1
0 голосов
/ 17 февраля 2018
with CTE_name (salary,name)
AS
( row_num() over (order by desc salary) as num from tablename )
select salary, name from CTE_name where num =1;

Это будет работать в оракуле

0 голосов
/ 23 ноября 2016
 SELECT salery,name
 FROM employ
 ORDER BY salery DESC limit 1, OFFSET n
0 голосов
/ 04 июля 2016

Что, если нам потребуется найти N-ую самую высокую зарплату без Row_Number, Rank, Dense Rank и подзапроса?

Надеюсь, что этот запрос ниже.[Тест] заказ по зарплате desc

Emp_Id  Name    Salary  Department
 4      Neelu   10000   NULL
 2      Rohit   4000    HR
 3      Amit    3000    OPS
 1      Rahul   2000    IT



select B.Salary from TEst B join Test A
on B.Salary<=A.Salary 
group by (B.Salary)
having count(B.salary)=2

Результат: - 4000, 2й наивысший.

0 голосов
/ 31 октября 2015

Максимальная сумма с использованием сервера MS SQL:

select sal from emp where sal=(select max(sal) from emp)

Вторая максимальная сумма:

select max(sal) from emp where sal not in (select max(sal) from emp)

...