Ваше решение близко к ответу, но обычно лучше использовать значение, заданное функцией RANK ():
select id
, name
, sal
from (
select id
, name
, sal
, rank() over(order by(salary) desc) as sal_rank
from instructor
)
where sal_rank <=10
/
Проблема с rownum заключается в том, что он произвольно усекает набор результатов. Если у нас есть ничья на десятом месте, обычно важно знать этот факт. Использование ROWNUM возвращает одну случайную запись.
Иногда ROWNUM - или аналитический ROW_NUMBER () - будет правильным. Это зависит от конкретных бизнес-требований.