如何基于多列值聚合生成去重的STRING_AGG拼接列?
实现去重后的行值拼接(解决STRING_AGG重复值问题)
原SQL中STRING_AGG会将分组内所有COLUMN1值直接拼接,包括重复项,导致出现A1, A1, A4这类重复结果。以下是不同场景下的解决方案:
直接支持DISTINCT的数据库(SQL Server 2017+、PostgreSQL 9.0+)
直接在STRING_AGG中加入DISTINCT关键字即可实现去重拼接:
SELECT STRING_AGG(DISTINCT COLUMN1, ', ') AS COLUMN1_ALIAS ,COLUMN2 ,COLUMN3 ,COLUMN4 FROM TABLE GROUP BY COLUMN2, COLUMN3, COLUMN4
注:PostgreSQL中
TABLE是关键字,需用双引号包裹:"TABLE"
MySQL环境(8.0+)
MySQL使用GROUP_CONCAT函数,同样支持DISTINCT:
SELECT GROUP_CONCAT(DISTINCT COLUMN1 SEPARATOR ', ') AS COLUMN1_ALIAS ,COLUMN2 ,COLUMN3 ,COLUMN4 FROM `TABLE` GROUP BY COLUMN2, COLUMN3, COLUMN4
旧版本数据库(不支持聚合函数内用DISTINCT)
先通过子查询对目标列组合去重,再进行聚合拼接:
SELECT STRING_AGG(t.COLUMN1, ', ') AS COLUMN1_ALIAS ,t.COLUMN2 ,t.COLUMN3 ,t.COLUMN4 FROM ( -- 先对需要的列去重 SELECT DISTINCT COLUMN1, COLUMN2, COLUMN3, COLUMN4 FROM TABLE ) t GROUP BY t.COLUMN2, t.COLUMN3, t.COLUMN4
内容的提问来源于stack exchange,提问作者fosterXO
相关产品推荐
相关产品推荐

