上一篇文章 跨表更新,看到本身写的SQL像个憨憨 写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 馮大
和 馮二
也要面对无情的 KPI 考核了,他们工做干的很不错,performance 分别是 4 和 5html
新需求来了,静悄悄的来了!!! 领导想要查看每一个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要获得下面的结果:mysql
要将结果集中某个指定的列进行字符串拼接,这要怎么作呢?主角闪亮✨登场面试
在 Mysql 官方文档 中,该函数被放在聚合函数章节,若是你要按照指定字段分组拼接,就要配合关键字 GROUP BY
来使用的sql
该函数返回一个字符串结果,该字符串结果是经过分组串联的
非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是这个结果:学习
到这里,领导给过来的需求就完成了😜spa
客官请留步,您点的菜还没上完呢......3d
咱们是国际化的团队,咱们的家乡遍及五湖四海
领导想关怀一下员工,要查看公司所有员工的家乡都有哪些地方。员工们可能来自同一个地方,因此要将结果集去重复,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
函数拼接字符串默认的分隔符是逗号 ,
, 领导不开心,逗号么的感情,要用❕才能体现出关怀的强烈, 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;
复制代码
该语句在执行后,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 了
聚合函数和 group by 搭配有哪些限制?
你能立刻想到的聚合函数操做除了 sum 还有哪些?
加我微信好友, 进群娱乐学习交流,备注「进群」
欢迎持续关注公众号:「日拱一兵」
- 前沿 Java 技术干货分享
- 高效工具汇总 | 回复「工具」
- 面试问题分析与解答
- 技术资料领取 | 回复「资料」
以读侦探小说思惟轻松趣味学习 Java 技术栈相关知识,本着将复杂问题简单化,抽象问题具体化和图形化原则逐步分解技术问题,技术持续更新,请持续关注......