用过MSSQL的都知道一个函数:FOR XML PATH(),可以根据GROUP BY后面的分组字段,将指定字段的值按照约定的符号(比如逗号)分割开后,放在一个字段里。那么MySQL有吗?今天很高兴找到了一个类似的函数:GROUP_CONCAT,下面我们来看看它的能耐:
表结构及数据如下:
现在想按照sex字段group by,然后将所有的name_ch通过逗号分隔,然后放在一个字段中,即如下效果:
很简单吧,其实代码也很简单,请看:
select sex,
group_concat(distinct name_ch) as name_ch
from test.t1
group by sex
order by sex;
这种用到了一个函数:GROUP_CONCAT,是CONCAT的一个功能扩展,完美实现了FOR XML PATH()的效果。默认是按照逗号分隔,如果你想要按照其他符号也可以,只需要加上:SEPARATOR '',在单引号里指定你想要的符号即可。
比如我们希望用两个竖线来分隔,那么只需要这样:
select sex,
group_concat(distinct name_ch separator '||') as name_ch
from test.t1
group by sex
order by sex;
效果如下:
看,两个竖线分隔了姓名,简单有效。