Как произвести ранг в Oracle

Нужно ранжировать ниже по зарплате, с самой высокой зарплатой, имеющей ранг 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 ответа

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 - связи будут иметь одинаковое значение ранга, будучи пронумерованными последовательно.

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

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

Другие вопросы по тегам