如何使用 DENSE_RANK 并按附加列排序?

How to use DENSE_RANK and order by aditional column?

我正在尝试使用 dense_rank 获取元素顺序,例如:

我有 table 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

试试这个查询:

select DENSE_RANK() over (order by SEQUENCE) as seq
 , role_name
 , sequence
from seq_test;

结果:

seq role_name sequence
  1 B               10
  2 A               20

由于常规的ORDER BY子句是在[=之后执行的12=]。因此 ORDER BY 语句的 SELECT 子句将始终优先于来自行顺序的子句它们由 分析函数 .

处理

在你的情况下 ORDER BY sequence 覆盖来自 分析函数 ORDER BY role_name .

顺便说一句,根据 最后一条评论 ,您需要的内容可能会通过添加额外的 MIN() 分析函数来解决,例如

SELECT DENSE_RANK() OVER (ORDER BY seq) AS seq, role_name, sequence
  FROM
  (
   SELECT MIN(sequence) OVER (PARTITION BY role_name ) AS seq,
          role_name, sequence
     FROM seq_test
  ) t 

Demo