Использование ранга для выбора 10 лучших кортежей в Oracle SQL - PullRequest
4 голосов
/ 25 февраля 2010

У меня есть инструктор по отношениям (ID, имя, название отдела, зарплата).

Вопрос в нашем задании просит нас: Используйте функцию ранга в SQL, чтобы написать запрос, чтобы найти идентификатор и имя этих инструкторов в топ-10 самых высокооплачиваемых.

Я могу ранжировать инструкторов, используя select id, name, rank() over(order by(salary) desc) as sal from instructor order by sal

Каков мой следующий шаг в захвате 10 лучших инструкторов? Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Ваше решение близко к ответу, но обычно лучше использовать значение, заданное функцией 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 () - будет правильным. Это зависит от конкретных бизнес-требований.

0 голосов
/ 25 февраля 2010

Я только что понял, используя rownum ...

select id, name from(
  select id, name, rank() over(order by(salary) desc) as sal
    from instructor order by sal
  )
where rownum <=10

Надеюсь, это поможет кому-то в будущем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...