【发布时间】:2015-08-11 12:25:57
【问题描述】:
输入是一个长度为“n”的数组。我需要生成数组元素的所有可能组合,包括输入数组中元素较少的所有组合。
IN: j='{A, B, C ..}'
OUT: k='{A, AB, AC, ABC, ACB, B, BA, BC, BAC, BCA..}'
重复,所以AB BA..
我尝试过这样的事情:
WITH RECURSIVE t(i) AS (SELECT * FROM unnest('{A,B,C}'::text[]))
,cte AS (
SELECT i AS combo, i, 1 AS ct
FROM t
UNION ALL
SELECT cte.combo || t.i, t.i, ct + 1
FROM cte
JOIN t ON t.i > cte.i
)
SELECT ARRAY(SELECT combo FROM cte ORDER BY ct, combo ) AS result;
它正在生成没有重复的组合......所以我需要以某种方式修改它。
【问题讨论】:
-
你试过什么?您必须在 Postgres 中执行此操作吗?您可以使用 pl/PGSQL 或其他过程语言吗?一定要使用数组吗?
-
您只想要长度为 1 到 3 的字符串吗?
-
输入是可变的,因此它应该对数组中的所有元素进行组合..
-
您是否查找过公认的算法来生成组合?也许如果你确定了你想怎么做,然后尝试在 SQL 中实现它,你会得到更好的结果..
标签: sql postgresql combinations