SQL查询如何将同组多行面试官姓名合并为逗号分隔单列
SQL修改实现多值字段逗号拼接的方案
你需要通过「分组+字符串聚合」的逻辑修改查询,核心是把同一条招聘申请下的多个面试官姓名合并为单个逗号分隔的字符串,同时按其余固定字段分组保证仅返回单条记录。
注意不同数据库的字符串聚合函数语法有差异,对应写法如下:
MySQL 5.7/8.0 版本
直接使用GROUP_CONCAT函数实现拼接,修改后的SQL如下:
select irc.requistion_number, irc.CANDIDATE_FNAME, irc.CANDIDATE_LNAME, email.title, email.EMAIL_ADDRESS, GROUP_CONCAT(email.Interviewer SEPARATOR ' , ') AS `Interviewer Name` from irc_requistion irc inner join email_address email on irc.email_id = email.email_id and irc.requistion_number = email.requistion_number group by irc.requistion_number, irc.CANDIDATE_FNAME, irc.CANDIDATE_LNAME, email.title, email.EMAIL_ADDRESS;
这里把原来的隐式逗号连接改成了显式
INNER JOIN写法,逻辑和原语句完全一致,可读性更高。
其他常用数据库对应写法
- PostgreSQL、SQL Server 2017及以上版本:使用
STRING_AGG函数,把上述SQL中聚合面试官的行替换为STRING_AGG(email.Interviewer, ' , ') AS "Interviewer Name"即可,其余分组、连接逻辑保持不变。 - Oracle 11g及以上版本:使用
LISTAGG函数,聚合行替换为LISTAGG(email.Interviewer, ' , ') WITHIN GROUP (ORDER BY email.Interviewer) AS "Interviewer Name"。
补充说明
- 如果需要去掉重复的面试官姓名,可以在聚合函数内加
DISTINCT关键字,比如MySQL中写为GROUP_CONCAT(DISTINCT email.Interviewer SEPARATOR ' , ') - 如果面试官姓名字段本身包含逗号,建议把分隔符换成分号等特殊字符,避免后续数据解析出错。
内容的提问来源于stack exchange,提问作者SSA_Tech124
相关产品推荐
相关产品推荐

