Как произвести ранг в Oracle - PullRequest
2 голосов
/ 31 июля 2010

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

Показанный столбец 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

Ответы [ 3 ]

3 голосов
/ 01 августа 2010

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 вернула бы одинаковый ранг для обоих сотрудников. Однако это приведет к разрыву в рядах (т. Е. Непоследовательные ранги).Это сильно отличается от функции dens_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 -связи будут иметь одинаковое значение ранга при последовательной нумерации.

1 голос
/ 24 декабря 2010

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

1 голос
/ 31 июля 2010

Посмотрите на ранг - образцы здесь .

...