我试图在SQL中复制一个python功能,但是我很难用表而不是循环/迭代来考虑它。
import itertools
rangeStart = 1
rangeEnd = 20
rangeStep = 2
outputSize = 3
lst = range(rangeStart, rangeEnd, rangeStep)
list = list(itertools.combinations(lst, outputSize))
print(len(list))
我如何在SQL中复制上述Python代码的输出,同时仍允许输入(能够将用户界面中的输入字段绑定(?
(要具体,输出应为排列,而不是组合。我基本上试图从GUI中获得一些输入,它们在其中输入范围(即0,20(,值(甚至,奇数或全部(的类型以及输出中每个元组的长度。输出是分类的元组列表,因此(1,2,3(很好,(2,3,1(或(1,3,2(不好。该元素的价值从左到右也增加,因此(2,4,6(很好,但是(6,4,2(不升值。元组中的值也很独特,因此(4,4,6(不好。
使用递归CTE生成1到20的奇数,然后一系列cross join
s。
with t(val) as (select 1 union all select val+2 from t where val<19)
select *
from t t1
cross join t t2
cross join t t3
where t1.val<t2.val and t2.val<t3.val
这会产生您当前以行形式的列表中的单元。
Sample Demo