本文以两位员工馮大和馮二也要面对无情的KPI考核了为例进行,他们工作干得很不错,performance分别是4和5
新需求来了,静悄悄的来了!!!领导想要查看每个performance下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果:
要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮登场
GROUP_CONCAT(expr)
在Mysql官方文档中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字GROUPBY来使用的
定义
该函数返回一个字符串结果,该字符串结果是通过分组串联的非NULL值。如果没有非NULL值,则返回NULL。完整语法如下:
What?这个语法看着太复杂了吧,别着急,下面会用例子慢慢说明逐一验证滴
使用案例
先完成文章开头的需求:
zou是这个结果:
到这里,领导给过来的需求就完成了
客官请留步,您点的菜还没上完呢……
我们是国际化的团队,我们的家乡遍布五湖四海
领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复,DISTINCT关键字就派上用场了
SELECTGROUP_CONCAT(DISTINCThome_town)FROMemployees;
来看结果:
领导的关怀遍布五湖四海啊……
文案要改了,领导的关怀是遍布四海五湖的,那么ORDERBY关键字就派上用场了
这里你看到GROUP_CONCAT函数拼接字符串默认的分隔符是逗号,领导不开心,逗号么的感情,要用才能体现出关怀的强烈,SEPARATOR关键字就派上用场了
分组拼接的值之间默认分隔符是逗号(,)。要明确指定分隔符,需要使用SEPARATOR关键字,紧跟其后的是你想设置的分隔符。要完全消除分隔符,就在SEPARATOR关键字后面写就好了
这关怀到位了吧,你品,你细品!!!
领导的关怀能力也有限,拼接的字符串默认的最大长度是个字符,可以通过下面语句查看当前限制是多少:
showvariableslikegroup_concat_max_len;
领导的能力可是飘忽不定的,所以我们可以灵活的设置这个值
SET[GLOBAL
SESSION]group_concat_max_len=val;
SESSION:在当前对话中生效GLOBAL:全局都生效该语句在执行后,MySQL重启之前一直有作用,一旦重启MySQL,则会恢复默认值有时候GROUP_CONCAT()还要搭配CONCAT_WS()发挥出一点点威力,举个简单的例子
将消费者的名和姓用逗号进行分隔,然后再用;进行分隔
这里是CONCAT_WS()函数用法,很简单,请自行查看吧......
注意
GROUP_CONCAT()函数返回单个字符串,而不是值列表。这意味着我们不能在IN运算符中使用GROUP_CONCAT()函数的结果,例如,在子查询中,像这样:
总结
在许多情况下,我们都可以应用GROUP_CONCAT()函数产生出有用的结果,同时也可以结合其他函数发挥出更大的威力.单招学会了,就要学会连招