内容简介:上一篇文章新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果:
上一篇文章 跨表更新,看到自己写的 SQL 像个憨憨 写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大
和 馮二
也要面对无情的 KPI 考核了,他们工作干的很不错,performance 分别是 4 和 5
新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果:
要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮:sparkles:登场
GROUP_CONCAT(expr)
在 Mysql 官方文档 中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 GROUP BY
来使用的
定义
该函数返回一个字符串结果,该字符串结果是通过分组串联的 非NULL值
。如果没有非NULL值,则返回NULL。完整语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
What? 这个语法看着太复杂了吧,别着急,下面会用例子慢慢说明逐一验证滴
使用案例
先完成文章开头的需求:
SELECT performance, GROUP_CONCAT(employee_name) AS employees FROM employees GROUP BY performance;
zou是这个结果:
到这里,领导给过来的需求就完成了:stuck_out_tongue_winking_eye:
客官请留步,您点的菜还没上完呢......
我们是国际化的团队,我们的家乡遍布五湖四海
领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复, DISTINCT
关键字就派上用场了
SELECT GROUP_CONCAT(DISTINCT home_town) FROM employees;
来看结果:
领导的关怀遍布五湖四海啊......
文案要改了,领导的关怀是遍布 四海五湖
的, 那么 ORDER BY
关键字就派上用场了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '领导关怀地区' FROM employees; -- 没我这么起变量的哈,还是汉语,我看你是疯了
这里你看到 GROUP_CONCAT
函数拼接字符串默认的分隔符是逗号 ,
, 领导不开心,逗号么的感情,要用:grey_exclamation:才能体现出关怀的强烈, SEPARATOR
关键字就派上用场了
分组拼接的值之间默认分隔符是逗号(,)。要明确指定分隔符,需要使用 SEPARATOR
关键字,紧跟其后的是你想设置的分隔符。要完全消除分隔符,就在 SEPARATOR
关键字后面写 '' 就好了
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS '领导关怀地区' FROM employees;
SELECT GROUP_CONCAT(DISTINCT home_town SEPARATOR '') AS '领导关怀地区' FROM employees;
这关怀到位了吧,你品,你细品!!!
领导的关怀能力也有限, 拼接的字符串默认的最大长度是1024个字符 ,可以通过下面语句查看当前限制是多少:
show variables like 'group_concat_max_len';
领导的能力可是飘忽不定的,所以我们可以灵活的设置这个值
SET [GLOBAL | SESSION] group_concat_max_len = val;
- SESSION: 在当前对话中生效
- GLOBAL:全局都生效
该语句在执行后,MySQL重启之前一直有作用,一旦重启 MySQL,则会恢复默认值
有时候 GROUP_CONCAT()
还要搭配 CONCAT_WS()
发挥出一点点威力,举个简单的例子
将消费者的名和姓用逗号进行分隔,然后再用 ;
进行分隔
SELECT GROUP_CONCAT( CONCAT_WS(', ', contactLastName, contactFirstName) SEPARATOR ';') FROM customers;
这里是 CONCAT_WS()函数用法 , 很简单,请自行查看吧......
注意:warning:
GROUP_CONCAT()函数返回单个字符串,而不是值列表。这意味着我们不能在 IN 运算符中使用GROUP_CONCAT()函数的结果,例如,在子查询中, 像这样:
SELECT id, name FROM table_name WHERE id IN GROUP_CONCAT(id);
总结
在许多情况下,我们都可以应用GROUP_CONCAT()函数产生出有用的结果,同时也可以结合其他函数发挥出更大的威力. 单招学会了,就要学会连招 combo 了
- 如果你也像我一样刚知道这个知识点,还请点个「在看」
- 如果你早都知道这个小儿科内容,还请留言送上「嘘声」
灵魂追问
-
聚合函数和 group by 搭配有哪些限制?
-
你能马上想到的聚合函数操作除了 sum 还有哪些?
以上所述就是小编给大家介绍的《MySQL拼接字符串,GROUP_CONCAT 值得拥有》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacking Growth
Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00
The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!