【发布时间】:2022-01-19 23:35:23
【问题描述】:
例如,我正在尝试使用 dense_rank 来获取元素顺序:
我有带数据的表 seq_test:
create table seq_test (sequence number, role_name varchar2(20));
insert into seq_test values (10, 'B');
insert into seq_test values (20, 'A');
select DENSE_RANK() over (order by role_name) as seq
, role_name
, sequence
from seq_test
order by sequence
运行上面的代码后,我得到了:
SEQ ROLE_NAME SEQUENCE
2 B 10
1 A 20
我想实现:
SEQ ROLE_NAME SEQUENCE
1 B 10
2 A 20
所以 DENSE_RANK() 函数使用它自己在函数定义中定义的顺序,我需要按顺序列对 SEQ 列进行排序。
更新:
我想得到:
seq role_name sequence
1 B 10
2 C 15
2 C 15
3 A 25
3 A 30
【问题讨论】:
-
如果你需要
SEQ按SEQUENCE排序,那么密集秩函数为什么要按ROLE_NAME排序呢?应通过SEQUENCE订购。抱歉,这个问题没有多大意义。 -
你的密集排名不是
(order by role_name desc)吗?以及为什么dense_rank... row_number() 在给定数据的情况下似乎可以工作我看不到给定样本数据dense_rank 的原因。
标签: sql oracle analytic-functions