Как найти 5 лучших зарплат в oracle, используя ключевое слово rownum - PullRequest
0 голосов
/ 23 апреля 2020
select * from (select * from employees where salary in (select distinct salary from employees ) order by salary desc ) where rownum <=5

Я не могу отличиться от приведенного выше запроса

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Вы можете использовать аналитическую функцию DENSE_RANK следующим образом:

SELECT * FROM
    ( SELECT E.*,
             DENSE_RANK() OVER (ORDER BY SALARY DESC NULLS LAST) AS DRN
        FROM EMPLOYEES )
WHERE DRN <= 5;
0 голосов
/ 23 апреля 2020

Вы должны использовать что-то вроде ниже.

Сначала получите 5 лучших зарплат, а затем получите сотрудников, имеющих эту зарплату

 select * from employees e inner join 
  (select * from (select distinct e.salary  from employees e order by e.salary desc ) 
  where rownum <=5 )e1 on e1.salary=e.salary
0 голосов
/ 23 апреля 2020

Вам нужно получать записи сотрудников после получения отдельной зарплаты в подзапросе:

select * from employees where salary in (select * from (select distinct salary from employees order by salary desc ) where rownum <=5)

Или использовать получить первое предложение

select * from employees where salary in (select distinct salary from employees order by salary desc FETCH FIRST 5 ROWS ONLY) 

Получить Первое предложение, которое при желании может быть объединено с предложением смещения результата, ограничивает количество строк, возвращаемых в наборе результатов. Иногда предложение fetch first может быть полезно для извлечения только нескольких строк из большого набора результатов, обычно в сочетании с предложением ORDER BY. Использование этого пункта может дать преимущества эффективности. Кроме того, это может упростить программирование приложения.

...