排列组合
Select *
From (
Select translate(sys_connect_by_path(tt,'-'),'A-','A') target
,length(translate(sys_connect_by_path(tt,'-'),'A-','A')) sort_key
,prn,chl
From (
Select substr(tar,rnk,1) tt,
rank() over ( Order By substr(tar,rnk,1)) prn,
rank() over ( Order By substr(tar,rnk,1)) + 1 chl
From (Select '&1' tar From Dual ),
(Select Level rnk From Dual Connect By 1 = 1 And Rownum <= length('&1') )
Order By tt )
Start With 1 = 1
Connect By prn >= Prior chl )
Order By sort_key Desc , target ;
SQL> /
输入
1
的值
: abc
输入
1
的值
: abc
TARGET
-------------------------------------------------------------------------
SORT_KEY PRN CHL
---------- ---------- ----------
abc
3 3 4
ab
2 2 3
ac
2 3 4
bc
2 3 4
a
1 1 2
b
1 2 3
c
1 3 4
本文介绍了一种使用SQL实现的复杂排列组合查询技巧,通过精心设计的递归查询和字符串处理函数,可以高效地生成所有可能的子集组合,并按长度降序排列。此方法适用于需要进行组合数学运算的数据分析场景。
1438

被折叠的 条评论
为什么被折叠?



