Как произвести ранг в 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 - связи будут иметь одинаковое значение ранга, будучи пронумерованными последовательно.
Я часто обращаюсь к этой подробной, информативной, но быстрой ссылке Аналитические функции для аналитических функций.