Использование Oracle 12C
Эта функция относится к функции Dense_Rank в группе агрегирования, она берет два столбца (зарплата, комиссия), существующих в таблице (emp), и предоставляет ее ранг. Результаты немного сбивают с толку. Ранг отображается, даже если значения отсутствуют в базе данных. Есть две записи с 3000.
Существующие значения в дБ для
sal, comm
3000, NULL
3000,50 (обновлено одно значение связи с NULL до 50 в таблице EMP)
Несуществующие значения в дБ для
sal, comm
3000,0
3000,100
3000,500
Дает ли он возможные ранги, если да, то дает ли он тот же ранг (3) для comm 100,500 и NULL.
И равный ранг (2) для комм 0 и 50.
ЗАКАЗ ПО SAL DESC И COMM ASC.
select DENSE_rank (3000,null) within group(order by sal desc,comm ) DENSE_NULL,
DENSE_rank (3000,0) within group(order by sal desc,comm) DENSE_ZERO,
DENSE_rank (3000,50) within group(order by sal desc,comm) DENSE_50,
DENSE_rank (3000,100) within group(order by sal desc,comm) DENSE_100,
DENSE_rank (3000,500) within group(order by sal desc,comm) DENSE_500
from emp;
Заказ по sal desc и comm asc
Здесь 49 дается ранг
50 дается ранг
51 и NULL присваиваются звания z.
SELECT DENSE_RANK (3000,49) WITHIN GROUP(ORDER BY sal DESC,comm) DENSE_49,
DENSE_RANK (3000,50) WITHIN GROUP(ORDER BY sal DESC,comm) DENSE_50,
DENSE_RANK (3000,51) WITHIN GROUP(ORDER BY sal DESC,comm) DENSE_51,
DENSE_RANK (3000,null) WITHIN GROUP(ORDER BY sal DESC,comm) DENSE_NULL
FROM emp;
Заказ по Sal desc и comm desc
Здесь 49 дается ранг
50 и 51 дается ранг
NULL присваивается звание z.
SELECT DENSE_RANK (3000,49) WITHIN GROUP(ORDER BY sal DESC,comm desc) DENSE_49,
DENSE_RANK (3000,50) WITHIN GROUP(ORDER BY sal DESC,comm desc) DENSE_50,
DENSE_RANK (3000,51) WITHIN GROUP(ORDER BY sal DESC,comm desc) DENSE_51,
DENSE_RANK (3000,null) WITHIN GROUP(ORDER BY sal DESC,comm desc) DENSE_NULL
FROM emp;