2010-07-31 5 views
2

нужно ранжировать ниже по заработной плате, с самой высокой заработной платы, имеющей ранг 1.Как производить ранг в Oracle

Столбец RANK показано то, что я после:

Empname  sal  address   RANK 
---------------------------------------------- 
Ram   3411  45,east road  2 
Anirban  2311  34,west wind  4 
Sagor   10000 34,south   1 
Manisha  3111  12,d.h road  3 
+4

Не вводите все крышки и не включайте некоторые разрывы строк. Вы знаете, редактор показывает предварительный просмотр того, как это будет выглядеть ... – rfusca

ответ

3

Oracle10g означает, что вы можете использовать аналитические/рейтинг/оконные функции, как ROW_NUMBER:

SELECT t.empname, 
     t.sal, 
     t.address, 
     ROW_NUMBER() OVER (ORDER BY t.sal DESC) AS RANK 
    FROM TABLE t 

Для педантичный, замените ROW_NUMBER с DENSE_RANK, если вы хотите, чтобы увидеть связи получить такое же значение ранга:

Если у двух сотрудников была такая же зарплата, функция RANK вернется к тому же рангу для обоих сотрудников. Однако это приведет к пробелу в разрядах (т. Е. Не последовательных рангов). Это сильно отличается от функции dense_rank, которая генерирует последовательные ранжирования.

Старые школьные средства ранжирования заключается в использовании:

SELECT t.empname, 
     t.sal, 
     t.address, 
     (SELECT COUNT(*) 
      FROM TABLE x 
     WHERE x.sal <= t.sal) AS RANK 
    FROM TABLE t 

выход будет соответствовать выходу DENSE_RANK - связи будут иметь одинаковое значение ранга, в то же время последовательно пронумерованы.

+2

Вы можете изменить свой ответ, чтобы использовать RANK() вместо ROW_NUMBER(). RANK() возвращает связи, тогда как ROW_NUMBER() произвольно заказывает связи с уникальными номерами. –

+0

Где требуется регулировать галстуки? Факт заключается в том, что подход подзаголовка SELECT COUNT (*) 'дает привязкам одинаковое значение ранга. –

1

Я часто ссылаюсь на эту подробную, информативную, но быструю ссылку Analytical Functions для аналитических функций.