В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию RANK с синтаксисом и примерами.
Описание
Oracle/PLSQL функция RANK возвращает ранг значения в группе значений. Это очень похоже на функцию DENSE_RANK. Однако функция RANK может возвращать не последовательное ранжирование, если тестируемые значения одинаковы. Тогда как, функция DENSE_RANK всегда будет приводить к последовательному ранжированию.
Функцию RANK можно использовать двумя способами - в качестве агрегатной функции или в качестве аналитической функции.
Синтаксис № 1 функция RANK - используется в качестве агрегатной функции
Как агрегатная функция, функция RANK возвращает ранг строки в группе строк.
Синтаксис для функции RANK при использовании в качестве агрегатной функции:
Параметры или аргументы
expr1 - первое выражение, которое идентифицирует уникальную строку в группе.
expr2, ... expr_n - необязательный. Дополнительные выражения, которые идентифицируют уникальную строку в группе.
Примечание
- Функция RANK возвращает numeric значение.
- В первом списке выражений должно быть столько же выражений, сколько в операторе ORDER BY.
- Списки выражений совпадают по позициям, поэтому типы данных должны быть совместимы между выражениями в первом списке, так и в списке оператора ORDER BY.
Применение
Функцию RANK можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Пример (как агрегирующая функция)
Рассмотрим пример функции RANK и изучим, как использовать функцию RANK в Oracle/PLSQL.
1 2 |
select RANK(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; |
Запрос SQL вернет ранг сотрудника с окладом в 1000$ и бонус в размере 500$ из таблицы employees.
Синтаксис № 2 функция RANK - используется в качестве аналитической функции
Как аналитическая функция, функция RANK возвращает ранг каждой строки запроса соответствующим для других строк.
Синтаксис функции RANK при использовании в качестве аналитической функции:
Функция RANK возвращает numeric значение.
Применение
функцию RANK можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Пример (как аналитическая функция)
1 2 3 4 5 |
select employee_name, salary, RANK() OVER (PARTITION BY department ORDER BY salary) from employees where department = 'Marketing'; |
Запрос SQL вернет всех сотрудников, работающих в отделе маркетинга, а затем рассчитает ранг для каждой уникальной зарплаты в отделе маркетинга. Если у двух сотрудников была одинаковая зарплата, функция RANK вернет тот же ранг, для обоих сотрудников. Тем не менее, это вызовет разрыв в рядах (т.е.: непоследовательных рангов). Это в корне отличается от функции DENSE_RANK который генерирует последовательные ранги.