Algorithm 呈现易于阅读的组合的算法

Algorithm 呈现易于阅读的组合的算法,algorithm,combinations,combinatorics,Algorithm,Combinations,Combinatorics,给出要购买的产品/计算机列表,我想让客户简单地了解可能的规格组合 我的输入(下图左侧)是一个组合列表。 所需输出(下图右侧)为图形表示 数据量有限,因此性能并不重要 问题 有没有一种算法或方法可以帮助我实现这一点 编辑:更新图像我相信PostgreSQL中的答案如下: -- CREATE TABLE computer( -- size VARCHAR (50), -- ram VARCHAR (50), -- hdd VARCHAR (50) -- ); SELECT size

给出要购买的产品/计算机列表,我想让客户简单地了解可能的规格组合

我的输入(下图左侧)是一个组合列表。 所需输出(下图右侧)为图形表示

数据量有限,因此性能并不重要

问题

有没有一种算法或方法可以帮助我实现这一点


编辑:更新图像

我相信PostgreSQL中的答案如下:

-- CREATE TABLE computer(
--   size VARCHAR (50),
--   ram VARCHAR (50),
--   hdd VARCHAR (50)
-- );

SELECT size as size, 
  STRING_AGG(DISTINCT(ram), '\n') as ram, 
  hdd as hdd 
  FROM (
    SELECT size as size, 
      STRING_AGG(DISTINCT(ram), '\n') as ram, 
      STRING_AGG(DISTINCT(hdd), '\n') as hdd 
      FROM computer 
      GROUP BY size, ram
    ) AS result 
  GROUP BY size, hdd;
在这个子查询中,我们按照大小和ram进行分组,因为,据我所知,一行中总是有一个大小,我们总是可以折叠hdd。可能有些ram是相等的,所以现在我们按hdd分组以折叠这些ram,并按大小分组以保持它们的唯一性


我希望这是有意义的,并回答了您的问题。

按顺序订购
?也就是说,
按大小、Ram、Hdd排序
,然后在SQL中显示每列中组合相同的值(
15”、“15”、“15”…
->
15”
)时,您可以使用Group By将相同的字段折叠为one@DmitryBychenko这两个例子都适用吗?@ginkul谢谢,您将如何构造此SQL查询?@Rasmus类似的内容将在PostgreSQL中工作。假设您有一个表
computer
,其中包含字段
size
ram
hdd
。在第一种情况下:
从计算机组中按大小、ram选择大小、ram、字符串(hdd、\n')
STRING\u AGG
是一个聚合函数,它将硬盘与
\n
连接起来。第二种情况:
按大小从计算机组中选择大小、STRING_AGG(ram,'\n')、STRING_AGG(hdd,'\n')这解决了OP问题。但是它不会扩展到10+columns@Rasmus哦,老兄,这越来越有趣了:我会努力寻找解决办法