n-я самая высокая зарплата с использованием подзапроса, и параметрластный_ранк не совпадает, если в таблице есть дублированные зарплаты - PullRequest
2 голосов
/ 09 января 2020

Я пытался получить n-ую самую высокую зарплату из таблицы, используя метод subquery и dens_rank. ниже приведены результаты для каждого метода.

Метод подзапроса:

select Top 1 Salary 
from (
    select top 7 Salary from Employee order by Salary desc
) as Result
order by Salary

Этот метод возвращает седьмую наивысшую зарплату как: 3000

Метод Dense_Rank:

select * 
from (
    select Salary, DENSE_RANK() Over(order by Salary desc) DRank 
    from Employee
) as Result 
where DRank=7

Этот метод возвращает седьмую наивысшую зарплату как: 1000

Исходные данные таблицы:

Employee Table

Кто-нибудь может дать мне представление о том, какой метод является правильным и почему?

1 Ответ

2 голосов
/ 09 января 2020

DENSE_RANK() не делает то, что вы хотите. Он присваивает инкрементные числа , в то же время присваивая одинаковый ранг связям Таким образом, может быть более 6 записей с более высокой зарплатой, чем записи, занявшие 7-е место.

Другой запрос дает правильный результат, но его можно упростить, используя синтаксис OFFSET/FETCH, который доступен в SQL Сервер с версии 2012:

select * from employee order by salary offset 6 rows fetch next 1 row only
...