按单列分组并获取所有不重复元素的实现方法
按colA分组获取colB的不重复值
原始数据:
colA colB ----------- a apple a grape a apple a apple b lion b tiger
一、输出展开的去重结果
要得到每个colA对应的不重复colB行,用以下两种方式即可实现:
方法1:使用DISTINCT去重
SELECT DISTINCT colA, colB FROM your_table ORDER BY colA, colB;
方法2:使用GROUP BY去重
SELECT colA, colB FROM your_table GROUP BY colA, colB ORDER BY colA, colB;
执行后得到结果:
a apple a grape b lion b tiger
二、输出聚合为数组格式的结果
不同数据库的聚合函数语法有差异,以下是主流数据库的实现方式:
MySQL
SELECT colA, CONCAT('[', GROUP_CONCAT(DISTINCT colB SEPARATOR ','), ']') AS colB_list FROM your_table GROUP BY colA;
PostgreSQL
SELECT colA, '[' || array_to_string(ARRAY_AGG(DISTINCT colB ORDER BY colB), ',') || ']' AS colB_list FROM your_table GROUP BY colA;
SQL Server
SELECT colA, '[' + STRING_AGG(DISTINCT colB, ',') + ']' AS colB_list FROM your_table GROUP BY colA;
执行后得到结果:
a [apple,grape] b [lion,tiger]
内容的提问来源于stack exchange,提问作者dallascow
相关产品推荐
相关产品推荐

