Простой способ БЕЗ использования какой-либо специальной функции, специфичной для Oracle, MySQL и т. Д.
Предположим, что таблица EMPLOYEE содержит данные, как показано ниже.Зарплаты можно повторить.
Путем ручного анализа мы можем определить ранги следующим образом: -

Тот же результат может быть достигнут с помощью запроса
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE ) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
order by rank

Сначала мы узнаем отличные зарплаты.Затем мы узнаем количество разных зарплат, превышающих каждый ряд.Это не что иное, как звание этого идентификатора.Для самой высокой зарплаты этот счет будет равен нулю.Итак, «+1» делается, чтобы начать ранг с 1.
Теперь мы можем получить идентификаторы с N-м рангом, добавив выражение where к вышеуказанному запросу.
select *
from (
select tout.sal, id, (select count(*) +1 from (select distinct(sal) distsal from
EMPLOYEE ) where distsal >tout.sal) as rank from EMPLOYEE tout
) result
where rank = N;