行重复时合并主键字段的SQL Select查询实现方法
解决方案
核心逻辑是按照 First、Surname、DOB 三个字段分组,对同组内的ID字段做字符串拼接聚合,不同数据库使用的聚合函数略有区别:
- MySQL :使用
GROUP_CONCAT函数
注意:如果同组ID数量较多,MySQL默认的GROUP_CONCAT长度限制可能会截断结果,可以提前执行SELECT GROUP_CONCAT(ID ORDER BY ID SEPARATOR ' / ') AS ID, First, Surname, DOB FROM 你的表名 GROUP BY First, Surname, DOB;SET SESSION group_concat_max_len = 102400;调整当前会话的长度限制。 - PostgreSQL、SQL Server 2017及以上版本:使用
STRING_AGG函数SELECT STRING_AGG(ID, ' / ' ORDER BY ID) AS ID, First, Surname, DOB FROM 你的表名 GROUP BY First, Surname, DOB; - Oracle 11gR2及以上版本:使用
LISTAGG函数SELECT LISTAGG(ID, ' / ') WITHIN GROUP (ORDER BY ID) AS ID, First, Surname, DOB FROM 你的表名 GROUP BY First, Surname, DOB;
内容的提问来源于stack exchange,提问作者Dustin Cook
相关产品推荐
相关产品推荐

