Python的itertools.combinations()的SQL版本
问题描述:
我想在SQL中复制一个Python函数,但我很难从表和循环/迭代的角度考虑它。Python的itertools.combinations()的SQL版本
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
这会在列表中生成当前以行形式存在的元组。
+0
正是我一直在寻找的eqivalent!谢谢! – happyhippo83
如果输出应该是排列组合,然后你想要的'itertools.permutations',不'itertools.combinations' –