You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中列内逗号分隔值的去重拼接实现

如何在PostgreSQL中去除逗号分隔字符串里的重复值?

嘿,我发现你现在的问题是想把字段里重复的逗号分隔值去掉对吧?你原来的代码没生效,是因为直接对整个description字段用distinct根本没用——毕竟整个字符串'a,b,a'本身是唯一的,所以去重操作相当于没做。

咱们换个思路:先把字符串拆成单个值,去重之后再拼回去就好啦!下面是完整的可运行脚本:

-- 创建临时表并插入测试数据
create temporary table test ( id integer, description text );
insert into test select 1,'a,b,a';

-- 正确的查询语句:拆分→去重→拼接
select 
    id,
    string_agg(distinct single_value, ',' order by single_value) as description
from test,
     unnest(string_to_array(description, ',')) as single_value
group by id;

代码分步解释:

  • string_to_array(description, ','):把逗号分隔的字符串转换成PostgreSQL数组,比如'a,b,a'会变成['a','b','a']
  • unnest(...):把数组拆成单独的行记录,这样原来的1条数据会变成3条:(1, 'a'), (1, 'b'), (1, 'a')
  • distinct single_value:对拆分后的单个值去重,剩下'a'和'b'
  • string_agg(..., ',' order by single_value):把去重后的值重新拼成逗号分隔的字符串,加上order by还能保证输出顺序稳定(可选,但推荐)

运行之后你就能得到想要的结果:

id | description
1 | a,b

内容的提问来源于stack exchange,提问作者KAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:08:40