В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию DENSE_RANK с синтаксисом и примерами.
Описание
Oracle/PLSQL функция DENSE_RANK возвращает ранг строки в упорядоченной группе строк. Она очень похожа на функцию RANK. Однако функция RANK может вызвать непоследовательное ранжирование если тестируемые значения одинаковы. Поэтому, функция DENSE_RANK всегда будет приводить к последовательному ранжированию строк.
Синтаксис
Синтаксис Oracle/PLSQL функции DENSE_RANK:
Параметры или аргументы
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.
Пример (как агрегирующая функция)
1 |
select DENSE_RANK(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; |
Запрос SQL вернет ранг строки сотрудника с окладом в 1000$ и бонус в размере 500$ из таблицы employees.
DENSE_RANK КАК АНАЛИТИЧЕСКАЯ ФУНКЦИЯ
Как аналитическая функция, функция DENSE_RANK возвращает ранг каждой строки запроса с соответствием для других строк.
Синтаксис функции DENSE_RANK при использовании в качестве аналитической функции:
функцию DENSE_RANK можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
Пример (как аналитическая функция)
1 2 3 4 |
select employee_name, salary, DENSE_RANK() OVER (PARTITION BY department ORDER BY salary) from employees where department = 'Marketing'; |
Запрос SQL вернет всех сотрудников, работающих в отделе маркетинга, а затем рассчитает ранг для каждой уникальной зарплаты в отделе маркетинга. Если у двух сотрудников была одинаковая зарплату, функция DENSE_RANK вернется тот же ранг, для обоих сотрудников.