当前位置: 首页 > 面试题库 >

PostgreSQL在递归查询中找到所有可能的组合(排列)

荣俊
2023-03-14
问题内容

输入是一个长度为’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;

它正在生成无重复的组合…因此我需要以某种方式进行修改


问题答案:

在递归查询中,将删除迭代中使用的搜索表中的术语,然后对其余记录重复查询。在您的情况下,这意味着一旦处理完第一个数组元素(“
A”),就不再可用于数组元素的进一步排列。为了重新获得那些“使用过的”元素,您需要与递归查询中的数组元素表交叉联接,然后过滤掉当前排列中已使用的数组元素(position(t.iin cte.combo) = 0)和停止迭代的条件(ct <= 3)。

WITH RECURSIVE t(i) AS (
  SELECT * FROM unnest('{A,B,C}'::char[])
), 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, t
     WHERE ct <= 3
       AND position(t.i in cte.combo) = 0
) 
SELECT ARRAY(SELECT combo FROM cte ORDER BY ct, combo) AS result;


 类似资料:
  • 问题内容: 我需要获取数组的所有可能的子集,其中至少要包含2个项目,而最大未知数。有人可以帮助我一点吗? 说我有这个… …我怎么得到这个? 问题答案: 窃取此JavaScript组合生成器后,我添加了一个参数以提供最小长度,从而, 要使用,提供一个数组以及所需的最小子集长度, 输出是

  • 问题内容: 我需要计算出 仅 在python中所有可能的 大小写 排列的列表,例如,使用ar输入它将返回[‘ar’,’Ar’,’aR’,’AR’] 或arc [‘arc’,’ Arc”,“ ARc”,“ aRc”,“ aRC”,“ ARC”],我知道可能有一些不错的方法,但对于我的一生,我无法弄清楚。 问题答案:

  • 问题内容: 当我尝试做这样的事情时,我意识到我真的需要上大学! 无论如何,我都有一个字符串数组(275),我需要遍历它们并用Java创建所有可能对的字符串。 我一直在学习递归,但是我找不到答案。 问题答案: 如果对和不同,请执行以下操作: 如果没有,请执行以下操作: 请注意,我假设数组包含唯一的字符串!

  • 问题内容: 我有这个架构 样本数据 SQL Fiddle演示。我已经插入了一些示例数据。 查兰芝 我需要找到唱片标题的所有父母。如何仅通过一个查询就可以获取所有父母? 我的意思是我需要这个结果: 期望的输出 假设我想使用其所有父项来获取条目,并且要使用where条件,那么它应该获取上述记录。 问题答案: 演示版

  • 本文向大家介绍在PostgreSQL中实现递归查询的教程,包括了在PostgreSQL中实现递归查询的教程的使用技巧和注意事项,需要的朋友参考一下  介绍 在Nilenso,哥在搞一个 (开源的哦!)用来设计和发起调查的应用。 下面这个是一个调查的例子: 在内部,它是这样表示滴:   一个调查包括了许多问题(question)。一系列问题可以归到(可选)一个分类(category)中。我们实际的数

  • 我得到了岩石的价格和数组中每一块岩石的值。我必须递归地(仅使用列出的4个变量)检查所有可能的岩石组合,以找到低于或等于岩石组合允许的最大重量的最高价格。 例如: 在这种情况下,可以找到的最高价格是50,因为20的重量低于25,值是50。这比5-10的权重高,5-10的权重也低于25,但它们的值加起来只有40,小于50。 示例2: 在这种情况下,最高价格是80美元。这是因为权重20 10加起来等于最