数据库教程:MySQL拼接字符串函数GROUP_CONCAT详解

上一篇文章 跨表更新,看到自己写的sql像个憨憨写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面对无情的 kpi 考核了,他们工作干的很不错,performance

上一篇文章 跨表更新,看到自己写的sql像个憨憨写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大馮二 也要面对无情的 kpi 考核了,他们工作干的很不错,performance 分别是 4 和 5

MySQL拼接字符串函数GROUP_CONCAT详解

新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果:

MySQL拼接字符串函数GROUP_CONCAT详解

要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮✨登场

group_concat(expr)

在 mysql 官方文档 中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 group by 来使用的

MySQL拼接字符串函数GROUP_CONCAT详解

定义

该函数返回一个字符串结果,该字符串结果是通过分组串联的非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是这个结果:

MySQL拼接字符串函数GROUP_CONCAT详解

到这里,领导给过来的需求就完成了😜

客官请留步,您点的菜还没上完呢……

我们是国际化的团队,我们的家乡遍布五湖四海

MySQL拼接字符串函数GROUP_CONCAT详解

领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复,distinct 关键字就派上用场了

  select group_concat(distinct home_town)  from employees;  

来看结果:

MySQL拼接字符串函数GROUP_CONCAT详解

领导的关怀遍布五湖四海啊……

文案要改了,领导的关怀是遍布四海五湖的, 那么 order by 关键字就派上用场了

  select group_concat(distinct home_town order by home_town desc) as '领导关怀地区'  from employees;    -- 没我这么起变量的哈,还是汉语,我看你是疯了  

MySQL拼接字符串函数GROUP_CONCAT详解

这里你看到 group_concat 函数拼接字符串默认的分隔符是逗号 ,, 领导不开心,逗号么的感情,要用❕才能体现出关怀的强烈, separator 关键字就派上用场了

分组拼接的值之间默认分隔符是逗号(,)。要明确指定分隔符,需要使用 separator 关键字,紧跟其后的是你想设置的分隔符。要完全消除分隔符,就在 separator 关键字后面写 ” 就好了

  select group_concat(distinct home_town order by home_town desc separator '!') as '领导关怀地区'  from employees;  

MySQL拼接字符串函数GROUP_CONCAT详解

  select group_concat(distinct home_town separator '') as '领导关怀地区'  from employees;  

MySQL拼接字符串函数GROUP_CONCAT详解

这关怀到位了吧,你品,你细品!!!

领导的关怀能力也有限,拼接的字符串默认的最大长度是1024个字符,可以通过下面语句查看当前限制是多少:

  show variables like 'group_concat_max_len';  

MySQL拼接字符串函数GROUP_CONCAT详解

领导的能力可是飘忽不定的,所以我们可以灵活的设置这个值

  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()函数用法, 很简单,请自行查看吧……

注意⚠️

group_concat()函数返回单个字符串,而不是值列表。这意味着我们不能在 in 运算符中使用group_concat()函数的结果,例如,在子查询中, 像这样:

  select    id, name  from    table_name  where    id in group_concat(id);  

总结

在许多情况下,我们都可以应用group_concat()函数产生出有用的结果,同时也可以结合其他函数发挥出更大的威力. 单招学会了,就要学会连招 combo 了

需要了解更多数据库技术:MySQL拼接字符串函数GROUP_CONCAT详解,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/820114.html

(0)
上一篇 2021年9月16日
下一篇 2021年9月16日

精彩推荐