Amazon Redshift中基于id将多行数据合并为单行的方案咨询
实现方案
方案1:使用内置LISTAGG函数(推荐)
Redshift官方原生提供该函数用于行转列字符串拼接,无需硬编码匹配answer值,完全适配动态数据场景。
基础用法
SELECT id, LISTAGG(answer, ',') WITHIN GROUP (ORDER BY answer) AS concatenated_answers FROM 你的表名 GROUP BY id;
参数说明
- 函数第二个参数
','为拼接分隔符,可根据需求替换为其他字符 WITHIN GROUP (ORDER BY answer)用于控制拼接后值的排序规则,无排序要求可直接删除ORDER BY子句,或替换为你需要的排序字段- 若拼接结果超过VARCHAR默认最大长度(65535字节),可添加溢出处理参数避免报错,示例:
SELECT id, LISTAGG(answer, ',') ON OVERFLOW TRUNCATE '...' WITHIN GROUP (ORDER BY answer) AS concatenated_answers FROM 你的表名 GROUP BY id;
方案2:去重拼接场景
如果同一个id下存在重复的answer值,需要去重后再拼接,可以直接在LISTAGG中添加DISTINCT关键字:
SELECT id, LISTAGG(DISTINCT answer, ',') WITHIN GROUP (ORDER BY answer) AS concatenated_answers FROM 你的表名 GROUP BY id;
注:2021年及之后发布的Redshift版本支持LISTAGG直接搭配DISTINCT使用,更早版本可先在子查询中对id、answer字段去重后再做聚合操作
内容的提问来源于stack exchange,提问作者Dave Hazuki
相关产品推荐
相关产品推荐

