碰巧我有这种类型的数据结构,并试图消除下的重复值 Type 在博士后。初始表
Type
Index Type 1 A, B 2 A, A 3 B, B
期望的表
Index Type 1 A, B 2 A 3 B
谢谢你的帮助!
z9zf31ra1#
可以使用cte将逗号分隔的值拆分为行,使用 STRING_TO_ARRAY 以及 UNNEST ; 然后使用 STRING_AGG :
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
输出:
sqlfiddle演示
8e2ybdfx2#
下面是一种不在整个表上使用聚合的替代方法:
SELECT Index, (SELECT STRING_AGG(DISTINCT t, ', ') FROM UNNEST(STRING_TO_ARRAY(Type, ', ')) AS t ) as types FROM Data;
这是一把小提琴。虽然我希望避免外部聚合可以在更大的数据集上提高性能,但事实似乎并非如此。
2条答案
按热度按时间z9zf31ra1#
可以使用cte将逗号分隔的值拆分为行,使用
STRING_TO_ARRAY
以及UNNEST
; 然后使用STRING_AGG
:输出:
sqlfiddle演示
8e2ybdfx2#
下面是一种不在整个表上使用聚合的替代方法:
这是一把小提琴。
虽然我希望避免外部聚合可以在更大的数据集上提高性能,但事实似乎并非如此。