Похоже, что Oracle (ROWNUM и без псевдонима для производной таблицы). ROWNUM рассчитывается для результирующих строк, поэтому вы никогда не сможете отфильтровать любое ROWNUM больше 1.
Вам нужен стандартный SQL ROW_NUMBER:
SELECT *
FROM
( SELECT salary
,row_number() over (ORDER BY salary desc) as rn
FROM employees
GROUP BY salary
) dt
WHERE rn = 3;
GROUP BY эквивалентна DISTINCT, но обрабатывается до ROW_NUMBER, а DISTINCT обрабатывается после .
Edit:
Если вы хотите использовать ROWNUM, вы должны использовать псевдоним:
SELECT *
FROM
(SELECT ROWNUM as rn, salary
FROM
(SELECT DISTINCT salary
FROM employees
ORDER BY salary desc)
)
WHERE rn = 3;