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