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

如何在Redshift中提取字符串/列表内的唯一值并返回去重后的列表形式

Redshift逗号分隔字符串去重解决方案

实现思路为先将分隔符拆分的字符串拆分为单行条目,去重后再拼接为目标格式字符串,具体实现如下:

适用场景

处理指定字段中以固定分隔符分隔的重复值,实现去重后返回原格式的字符串。以你给出的示例为例,假设存储表名为user_animal_records,可直接使用以下SQL:

SELECT
  email,
  LISTAGG(DISTINCT TRIM(animal_item), ', ') AS animal
FROM
  user_animal_records,
  UNNEST(STRING_TO_ARRAY(animal, ',')) AS t(animal_item)
GROUP BY
  email;

函数说明

  • STRING_TO_ARRAY(animal, ','):将原animal字段的逗号分隔字符串转换为数组,若分隔符为逗号加空格, 可直接替换参数,无需后续TRIM处理
  • UNNEST():将数组拆分为单条记录,每行对应一个动物值
  • TRIM(animal_item):去除单个动物值前后的空格,兼容分隔符前后带空格的场景
  • LISTAGG(DISTINCT ..., ', '):对拆分后的动物值去重后,重新用, 拼接为字符串

兼容低版本方案

若使用的Redshift版本不支持LISTAGG的DISTINCT参数,可通过子查询先去重再聚合:

WITH split_animal AS (
  SELECT
    email,
    TRIM(animal_item) AS animal_item
  FROM user_animal_records,
  UNNEST(STRING_TO_ARRAY(animal, ',')) AS t(animal_item)
),
deduplicated_animal AS (
  SELECT DISTINCT email, animal_item FROM split_animal
)
SELECT
  email,
  LISTAGG(animal_item, ', ') AS animal
FROM deduplicated_animal
GROUP BY email;

执行上述代码后即可得到你预期的去重结果:

emailanimal
ana@gmail.comDog, Cat, Bird, Lion

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:06:00