在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
上一篇文章 跨表更新,看到自己写的SQL像个憨憨写了关于跨表个更新的内容。一年过的很快,文中后来的两位员工 新需求来了,静悄悄的来了!!! 领导想要查看每个 performance 下都有谁,同时要求将这些人的名称要逗号拼接成一个字符串,也就是说要得到下面的结果: 要将结果集中某个指定的列进行字符串拼接,这要怎么做呢?主角闪亮✨登场 GROUP_CONCAT(expr) 在 Mysql 官方文档 中,该函数被放在聚合函数章节,如果你要按照指定字段分组拼接,就要配合关键字 定义 该函数返回一个字符串结果,该字符串结果是通过分组串联的
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是这个结果: 到这里,领导给过来的需求就完成了😜 客官请留步,您点的菜还没上完呢...... 我们是国际化的团队,我们的家乡遍布五湖四海 领导想关怀一下员工,要查看公司全部员工的家乡都有哪些地方。员工们可能来自同一个地方,所以要将结果集去重复, SELECT GROUP_CONCAT(DISTINCT home_town) FROM employees; 来看结果: 领导的关怀遍布五湖四海啊...... 文案要改了,领导的关怀是遍布 SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS '领导关怀地区' FROM employees; -- 没我这么起变量的哈,还是汉语,我看你是疯了 这里你看到 分组拼接的值之间默认分隔符是逗号(,)。要明确指定分隔符,需要使用 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,则会恢复默认值 有时候 将消费者的名和姓用逗号进行分隔,然后再用
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 了 |
请发表评论