我正在嘗試使用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
uj5u.com熱心網友回復:
試試這個查詢:
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
uj5u.com熱心網友回復:
由于常規ORDER BY子句在analytic processing. 因此ORDER BYSELECT 陳述句的子句將始終優先于來自分析函式處理的行順序的子句。
在您的情況下,來自分析函式的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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385708.html
上一篇:按街道收集顧客數量
下一篇:展平表格以獲得唯一的電子郵件地址
