DENSE_RANK ФУНКЦИЯ

В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию DENSE_RANK с синтаксисом и примерами.

Описание

Oracle/PLSQL функция DENSE_RANK возвращает ранг строки в упорядоченной группе строк. Она очень похожа на функцию RANK. Однако функция RANK может вызвать непоследовательное ранжирование если тестируемые значения одинаковы. Поэтому, функция DENSE_RANK всегда будет приводить к последовательному ранжированию строк.

Синтаксис

Синтаксис Oracle/PLSQL функции DENSE_RANK:

DENSE_RANK( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n )

Параметры или аргументы

expression1 .. expression_n может быть одно или несколько выражений, которые идентифицируют уникальную строку в группе..

Примечание

  • Функция DENSE_RANK возвращает numeric значение.
  • Количество expression в первом списке выражений, должно быть таким же, как и в операторе ORDER BY.
  • Список выражений позиции и типы данных в первом списке должны быть совместимы c выражениями, как и в операторе ORDER BY.

Применение

Функцию DENSE_RANK можно использовать в следующих версиях Oracle/PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Рассмотрим несколько примеров функции DENSE_RANK и изучим, как использовать функцию DENSE_RANK в Oracle/PLSQL.

Пример (как агрегирующая функция)

Запрос SQL вернет ранг строки сотрудника с окладом в 1000$ и бонус в размере 500$ из таблицы employees.

DENSE_RANK КАК АНАЛИТИЧЕСКАЯ ФУНКЦИЯ

Как аналитическая функция, функция DENSE_RANK возвращает ранг каждой строки запроса с соответствием для других строк.

Синтаксис функции DENSE_RANK при использовании в качестве аналитической функции:

DENSE_RANK() OVER ( [ query_partition_clause] ORDER BY clause )

функцию DENSE_RANK можно использовать в следующих версиях Oracle/PLSQL:

  • Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Пример (как аналитическая функция)

Запрос SQL вернет всех сотрудников, работающих в отделе маркетинга, а затем рассчитает ранг для каждой уникальной зарплаты в отделе маркетинга. Если у двух сотрудников была одинаковая зарплату, функция DENSE_RANK вернется тот же ранг, для обоих сотрудников.