请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

分组拼接字符串,GROUP_CONCAT

[复制链接]
查看: 61|回复: 0

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
92747
发表于 2020-2-15 11:45 | 显示全部楼层 |阅读模式
背景

一年过的很快,文中后来的两位员工 馮大 和 馮二 也要面临无情的 KPI 考核了,他们工作干的很不错,performance 别离是 4 和 5
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104644526-936735989

新需求来了,静悄悄的来了!!! 领导想要检察每个 performance 下都有谁,同时要求将这些人的称号要逗号拼接成一个字符串,也就是说要获得下面的成果:
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104644843-861213898

要将成果会合某个指定的罗列行字符串拼接,这要怎样做呢?配角闪亮退场
GROUP_CONCAT(expr)

在 Mysql 官方文档 中,该函数被放在聚合函数章节,假如你要依照指定字段分组拼接,就要配合关键字 GROUP BY 来利用的
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104645085-1659145837

界说

该函数返回一个字符串成果,该字符串成果是经过分组串联的非NULL值。假如没有非NULL值,则返回NULL。完整语法以下:
  1. GROUP_CONCAT([DISTINCT] expr [,expr ...]             [ORDER BY {unsigned_integer | col_name | expr}                 [ASC | DESC] [,col_name ...]]             [SEPARATOR str_val])
复制代码
What? 这个语法看着太复杂了吧,别焦虑,下面会用例子慢慢说明逐一考证滴
利用案例

先完成文章开首的需求:
  1. SELECT performance, GROUP_CONCAT(employee_name) AS employeesFROM employeesGROUP BY performance;
复制代码
接下来领导又提新需求了
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104645491-2122382798

领导想关切一下员工,要检察公司全数员工的故乡都有哪些地方。员工们大要来自同一个地方,所以要将成果集去反复,DISTINCT 关键字就派上用处了
  1. SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '领导关切地域'FROM employees;
复制代码
来看成果:
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104645733-868325799

领导的关切遍及大江南北啊......
这里你看到 GROUP_CONCAT 函数拼接字符串默许的分隔符是逗号 ,, 领导不高兴,逗号么的豪情,要用才华表现出关切的狠恶, SEPARATOR 关键字就派上用处了
分组拼接的值之间默许分隔符是逗号(,)。要明白指定分隔符,必要利用 SEPARATOR 关键字,紧跟后来的是你想设备的分隔符。要完全消除分隔符,就在 SEPARATOR 关键字后背写 '' 就行了
  1. SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS '领导关切地域'FROM employees;
复制代码
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104645939-1475058512

领导的关切才能也有限,拼接的字符串默许的最大长度是1024个字符,可以经过下面语句检察当前限制是几多:
  1. show variables like 'group_concat_max_len';
复制代码
我的关键词 分组拼接字符串,GROUP_CONCAT  热门消息 1203146-20200215104646165-1525659065

领导的才能可是飘忽不定的,所以我们可以灵活的设备这个值
SET [GLOBAL | SESSION] group_concat_max_len = val;
SESSION: 在当前对话中生效
GLOBAL:全局都生效
该语句在实行后,MySQL重启之前不停有感化,一旦重启 MySQL,则会规复默许值
偶然候 GROUP_CONCAT() 还要搭配 CONCAT_WS() 发挥出一点点能力,举个简单的例子
将消耗者的名和姓用逗号举行分隔,然后再用 ; 举行分隔
  1. SELECT    GROUP_CONCAT(       CONCAT_WS(', ', contactLastName, contactFirstName)       SEPARATOR ';')FROM    customers;
复制代码
这里是 CONCAT_WS()函数用法, 很简单,请自行检察吧......
留意

GROUP_CONCAT()函数返回单个字符串,而不是值列表。这意味着我们不能在 IN 运算符中利用GROUP_CONCAT()函数的成果,例如,在子查询中, 像这样:
  1. SELECT    id, nameFROM    table_nameWHERE    id IN GROUP_CONCAT(id);
复制代码
灵魂诘问

聚合函数和 group by 搭配有哪些限制?
你能立即想到的聚合函数操纵除了 sum 还有哪些?
转自:https://segmentfault.com/a/1190000021680731

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 WAYSFOCUS 影像 你 我 他,中国商业影视一站式解决平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表