Eingabe ist ein Array von 'n' Länge. Ich muss alle möglichen Kombinationen von Array-Elementen generieren, einschließlich aller Kombinationen mit weniger Elementen aus dem Eingabe-Array.PostgreSQL findet alle möglichen Kombinationen (Permutationen) in der rekursiven Abfrage
IN: j='{A, B, C ..}'
OUT: k='{A, AB, AC, ABC, ACB, B, BA, BC, BAC, BCA..}'
Mit Wiederholungen, so mit AB
BA
..
ich so etwas wie dies versucht haben:
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;
Es wird Kombinationen ohne Wiederholungen zu erzeugen ... also muss ich das irgendwie ändern .
Was haben Sie versucht? Müssen Sie das in Postgres tun? Können Sie pl/PGSQL oder eine andere prozedurale Sprache verwenden? Müssen Sie Arrays verwenden? –
wollen Sie nur Strings der Länge 1 bis 3? – 1010
Eingabe soll Variable sein, also sollte es Kombinationen von allen Elementen im Array machen. – Adam