在postgresql的列表/单元格中获取不同的值

5tmbdcev  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(276)

碰巧我有这种类型的数据结构,并试图消除下的重复值 Type 在博士后。
初始表

Index   Type
1       A, B
2       A, A
3       B, B

期望的表

Index   Type
1       A, B
2       A
3       B

谢谢你的帮助!

z9zf31ra

z9zf31ra1#

可以使用cte将逗号分隔的值拆分为行,使用 STRING_TO_ARRAY 以及 UNNEST ; 然后使用 STRING_AGG :

WITH Types AS (
  SELECT DISTINCT Index, UNNEST(STRING_TO_ARRAY(Type, ', ')) AS Type
  FROM Data
)
SELECT Index, STRING_AGG(Type, ', ') AS Type
FROM Types
GROUP BY Index
ORDER BY Index

输出:

Index   Type
1       A, B
2       A
3       B

sqlfiddle演示

8e2ybdfx

8e2ybdfx2#

下面是一种不在整个表上使用聚合的替代方法:

SELECT Index,
       (SELECT STRING_AGG(DISTINCT t, ', ')
        FROM UNNEST(STRING_TO_ARRAY(Type, ', ')) AS t
       ) as types
FROM Data;

这是一把小提琴。
虽然我希望避免外部聚合可以在更大的数据集上提高性能,但事实似乎并非如此。

相关问题