Ранжирующие функции
Ранжирующие функции вычисляют порядковый номер ранга внутри секции окна.
Эти функции могут применяться с использованием секционирования и сортировки и без них.Однако их использование без сортировки почти никогда не имеет смысла.
Функции ранжирования могут быть использованы для создания различных типов инкрементных счётчиков.Рассмотрим SUM(1) OVER (ORDER BY SALARY)
в качестве примера того, что они могут делать, каждая из них различным образом.Ниже приведён пример запроса, который позволяет сравнить их поведение по сравнению с SUM
.
SELECT
id,
salary,
DENSE_RANK() OVER (ORDER BY salary),
RANK() OVER (ORDER BY salary),
PERCENT_RANK() OVER(ORDER BY salary),
CUME_DIST() OVER(ORDER BY salary),
NTILE(3) OVER(ORDER BY salary),
ROW_NUMBER() OVER (ORDER BY salary),
SUM(1) OVER (ORDER BY salary)
FROM employee
ORDER BY salary;
id salary dense_rank rank percent_rank cume_dist ntile row_number sum -- ------ ---------- ---- ----------------- ----------------- ----- ---------- --- 3 8.00 1 1 0.000000000000000 0.200000000000000 1 1 1 4 9.00 2 2 0.250000000000000 0.400000000000000 1 2 2 1 10.00 3 3 0.500000000000000 0.800000000000000 2 3 4 5 10.00 3 3 0.500000000000000 0.800000000000000 2 4 4 2 12.00 4 5 1.000000000000000 1.000000000000000 3 5 5