PostgreSQL拆分列数据去重后转换为行数据的实现方案问询
PostgreSQL拆分逗号分隔列并去重转行实现方案
该需求完全可以实现,使用PostgreSQL内置函数即可完成,无需额外自定义逻辑。
实现思路
- 先用
string_to_array函数将逗号分隔的字符串列拆分为数组 - 再用
unnest函数将数组元素展开为多行数据 - 最后通过去重逻辑去掉重复值,两种常用实现方式如下:
实现代码
方式1:展开后整体去重(兼容性更好,全版本支持)
SELECT DISTINCT Id, unnest(string_to_array(ColumnData, ',')) AS ColumnData FROM TableA ORDER BY ColumnData;
方式2:先对数组去重再展开(性能更优,PostgreSQL 9.4及以上版本支持)
SELECT Id, unnest(array_unique(string_to_array(ColumnData, ','))) AS ColumnData FROM TableA ORDER BY ColumnData;
说明
两种方式针对你提供的示例数据,都可以得到你期望的输出结果。如果你的数据量较大,更推荐使用第二种方式,先去重数组元素再展开,减少后续计算量。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

