SQL查询重复邮箱时如何将关联用户名拼接为逗号分隔的同组记录
要实现按邮箱分组拼接同一邮箱对应的所有用户名的需求,不同数据库的语法略有差异,以下是主流数据库的实现方案:
MySQL 实现
MySQL 使用GROUP_CONCAT函数完成分组字符串拼接:
SELECT GROUP_CONCAT(NAME ORDER BY ID SEPARATOR ', ') AS NAME, EMAIL FROM users GROUP BY EMAIL HAVING COUNT(EMAIL) > 1;
其中ORDER BY ID可指定用户名的拼接顺序,不需要可以删除;如果不需要过滤仅出现1次的邮箱,直接去掉HAVING子句即可。
PostgreSQL / SQL Server 实现
这两类数据库使用STRING_AGG函数实现分组拼接:
SELECT STRING_AGG(NAME, ', ' ORDER BY ID) AS NAME, EMAIL FROM users GROUP BY EMAIL HAVING COUNT(EMAIL) > 1;
Oracle 实现
Oracle 使用LISTAGG函数完成分组拼接:
SELECT LISTAGG(NAME, ', ') WITHIN GROUP (ORDER BY ID) AS NAME, EMAIL FROM users GROUP BY EMAIL HAVING COUNT(EMAIL) > 1;
内容的提问来源于stack exchange,提问作者Krush23
相关产品推荐
相关产品推荐

