Ввод представляет собой массив длины «n». Мне нужно создать все возможные комбинации элементов массива, включая все комбинации с меньшим количеством элементов из входного массива.PostgreSQL находит все возможные комбинации (перестановки) в рекурсивном запросе
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? – 1010
Ввод является переменным, поэтому он должен составлять комбинации из всех элементов массива. – Adam