尝试使用循环值聚合postgres表值

时间:2018-05-28 09:15:35

标签: postgresql subquery aggregate

我有一个包含两列的表:首先是一个id列(让我们称之为ID),然后是一个值列(让我们将其命名为VALUE)。 VALUE列可以有两个值:'一个'和'两个'大多数ID在表格中显示一次,其值为' One'或者'两个'。但是,有些ID会在列中出现两次:一次有价值' One'第二次有价值的' Two'。我现在正在尝试编写一个查询,该查询会生成一个包含两列的表,其中所有ID只出现一次。第一列应包含ID,第二列应包含值' One',' Two'或者'一个和两个'如果ID在原始表中有两个值。我的查询现在直到:

WITH (
    SELECT id, 'One & Two' as value 
        FROM table_name
        GROUP BY id HAVING COUNT(*) = 2
 ) AS  both_values, (
    SELECT id, value 
        FROM table_name
      WHERE id NOT IN (SELECT id FROM both_values)
     ) AS other_values
 SELECT * FROM other_values
 UNION
 SELECT * FROM both_values;

这种接缝不起作用,我无法编写一个简单的查询来获得此结果。有人可以帮帮我吗?

编辑:在' One& amp;之后添加:: varchar二'做到了。但是,它对我来说似乎不是一个有效的问题。有什么想优化的吗?

1 个答案:

答案 0 :(得分:0)

找到解决方案:

SELECT STRING_AGG(DISTINCT value, ' & ' ORDER BY value),id    
    FROM table_name
    GROUP BY id

没那么难......