Вот ваш запрос, красиво отформатированный:
SELECT DISTINCT salary
FROM Worker a
WHERE 3 >= (SELECT COUNT (DISTINCT salary) FROM Worker b WHERE a.salary >= b.salary)
ORDER BY
salary DESC;
Для каждого работника в вашей таблице подзапрос находит число / число работников, чья зарплата на больше , чемзарплата работника по внешнему запросу.Только работы, для которых есть три или меньше других работников с большей отчетной зарплатой, будут возвращены запросом.
Существует другой способ написания запроса с использованием аналитических функций:
SELECT DISTINCT salary
FROM
(
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) dr
FROM Worker
) t
WHERE dr <= 3;
EDIT:
Самый простой способ написать запрос в Oracle:
select salary
from (select distinct salary
from worker
order by salary
) s
where rownum <= 3