相关文章推荐
幸福的红酒  ·  將一個欄位拆分為多個欄位 - Tableau·  2 月前    · 
飞奔的山羊  ·  ms-sql server sql ...·  2 月前    · 
从容的生姜  ·  使用 Java 列出 Blob - ...·  2 月前    · 
苦恼的小蝌蚪  ·  单位GDP能耗如何测算 - 国家统计局·  1 年前    · 
绅士的炒饭  ·  用工政策 | 塞尔维亚篇 - 知乎·  2 年前    · 
果断的毛豆  ·  臣服关系12 - 百度·  2 年前    · 
面冷心慈的枕头  ·  拯救者y9000p3060 - 商品搜索 - 京东·  2 年前    · 
曾经爱过的猴子  ·  谢霆锋PO朝霆进军电视综艺节目后期制作_手机新浪网·  2 年前    · 
Code  ›  MySQL如何分组拼接字符串?开发者社区
mysql 字符串函数 mysql函数 分隔符
https://cloud.tencent.com/developer/article/1586324
考研的麦片
2 年前
作者头像
用户4172423
0 篇文章

MySQL如何分组拼接字符串?

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 日拱一兵 > MySQL如何分组拼接字符串?

MySQL如何分组拼接字符串?

作者头像
用户4172423
发布 于 2020-02-19 11:45:08
3K 0
发布 于 2020-02-19 11:45:08
举报

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

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

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

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)
    FROM employees
GROUP  BY  performance;

zou是这个结果:

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

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

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

领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复, 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;
  • SESSION: 在当前对话中生效
  • GLOBAL:全局都生效

该语句在执行后,MySQL重启之前一直有作用,一旦重启 MySQL,则会恢复默认值

有时候 GROUP_CONCAT() 还要搭配 CONCAT_WS() 发挥出一点点威力,举个简单的例子

将消费者的名和姓用逗号进行分隔,然后再用 ; 进行分隔

SELECT
    GROUP_CONCAT(
       CONCAT_WS(', ', contactLastName, contactFirstName)
       SEPARATOR ';')
    customers;

这里是 CONCAT_WS()函数用法, 很简单,请自行查看吧......

注意⚠️

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

SELECT
 
推荐文章
幸福的红酒  ·  將一個欄位拆分為多個欄位 - Tableau
2 月前
飞奔的山羊  ·  ms-sql server sql 把逗号分隔的字符串分开_sql server 查询特殊符号拆分
2 月前
从容的生姜  ·  使用 Java 列出 Blob - Azure Storage | Microsoft Learn
2 月前
苦恼的小蝌蚪  ·  单位GDP能耗如何测算 - 国家统计局
1 年前
绅士的炒饭  ·  用工政策 | 塞尔维亚篇 - 知乎
2 年前
果断的毛豆  ·  臣服关系12 - 百度
2 年前
面冷心慈的枕头  ·  拯救者y9000p3060 - 商品搜索 - 京东
2 年前
曾经爱过的猴子  ·  谢霆锋PO朝霆进军电视综艺节目后期制作_手机新浪网
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号