Мне не нужен столбец рангов, но все же я хочу, чтобы данные были в том же формате, применяя плотный ранг.
select ename,position,deptno,dense_rank() over(partition by deptno order by ename asc) as rank from emp where deptno in ('10','30');
@RossBush.. Нет, не я. Тем не менее, я пробовал, и это дает мне ранг 1,2,3 для отдела 10 и 1,2,3,4,5,6 для отдела № 30.
Можете ли вы опубликовать образцы данных.
Вы заказываете разделом. В плотном_ранге записям будет присвоено последовательное значение по вашему порядку (внутри раздела). Как это может быть не что иное, как 1?
@RossBush... Пожалуйста, проверьте образец данных в вопросе.
Редактирование, сделанное @xQBert, вернет то, что (я думаю) вы искали. Почему бы просто не исключить это поле из набора результатов. Функция плотности_ранга не влияет на количество возвращаемых строк.
@RossBush ... Да, я могу сделать это, однако я хочу попробовать аналитическую функцию.
Зачем нужен ранг, просто заказывайте сначала по дептно, потом по эмалю.
SELECT ename,position,deptno,
FROM emp
WHERE deptno in ('10','30')
ORDER BY DeptNo, Ename
С помощью аналитической функции два варианта выведенной таблицы или CTE
Производное табличное/встроенное представление.
SELECT ename,position,deptno
FROM (select ename,position,deptno,dense_rank() over(partition by deptno order by ename asc) as rank
from emp
where deptno in ('10','30')) Z
ORDER BY deptNo, rank
Общее табличное выражение (CTE):
with Z AS (SELECT ename,position,deptno
, dense_rank() over(partition by deptno order by ename asc) as rank
FROM emp
WHERE deptno in ('10','30'))
SELECT ename,position,deptno
FROM z
ORDER BY deptno, rank
Оба эти последние 2 метода просто избегают подвергать функцию ранжирования внешнему запросу, в котором возвращаются результаты. Это «трюки» и неоптимальное время выполнения. если нет особой причины иметь данные ранга; Я бы не стал его использовать.
Я пытался с аналитической функцией.
@JaspreetSingh Я понимаю; но накладные расходы на оконную функцию не стоят того. Я добавил два способа сделать это; но я не вижу причин, если вы не указываете ранг в запросе.
Этот запрос всегда будет возвращать 1 для ранга. Следует ли заказывать сотруднику?