一、需求介绍与实践过程
根据相同值,拼接指定字段值,还可添加前缀后缀(GROUP_CONCAT()、CONCAT()、GROUP BY 联用)
使用场景:
表的情况
(表名:t_division 字段:id、division、name)
表名 | 字段1 | 字段2 | 字段3 |
t_division | id | division | name |
数据情况
id | division | name |
1 | 人事部 | 小李 |
2 | 运营部 | 红红 |
3 | 人事部 | 小明 |
4 | 技术部 | 阿张 |
5 | 技术部 | 小谢 |
6 | 人事部 | 大壮 |
7 | 管理部 | 老王 |
8 | 技术部 | 老王 |
9 | 管理部 | 小徐 |
10 | 人事部 | 小艺 |
11 | 人事部 | 小林 |
12 | 技术部 | 小春 |
13 | 人事部 | 小南 |
14 | 技术部 | 小方 |
15 | 技术部 | 小泽 |
① 相同部门的人员,部员名字进行拼接
解释: 查询t_division表,分组条件是division字段,指定name字段拼接
mysql代码如下:
SELECT t.division, GROUP_CONCAT(t.name SEPARATOR ',') AS nameListStr FROM t_division as t GROUP BY t.division
执行结果:
因为GROUP_CONCAT()使用是默认分隔符为,;所以可以省略成这样写(如下):
SELECT t.division, GROUP_CONCAT(t.name) AS nameListStr FROM t_division as t GROUP BY t.division
执行结果:
② 相同部门的人员,需要在名字上再加上部门的前缀
解释: 查询t_division表,分组条件是division字段,指定(拼接 division字段 + name字段)拼接
mysql代码如下:
SELECT t.division, GROUP_CONCAT(CONCAT(t.division,"-", t.name) SEPARATOR ',') AS nameListStr FROM t_division as t GROUP BY t.division
执行结果:
了解 GROUP_CONCAT()、CONCAT()、GROUP BY
经过实战,已经有一定了解了。
GROUP_CONCAT() 和 GROUP BY 进行联用,就是实现相同值的分组,拼接指定字段的值~
CONCAT() 就是将多个字符串连接成一个字符串(这里是连接两个字符串)
二、完整代码
1 先执行运行的sql(创建表导入数据)
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_division(by nanfangzhe) -- ---------------------------- DROP TABLE IF EXISTS `t_division`; CREATE TABLE `t_division` ( `id` int NOT NULL, `division` varchar(255) DEFAULT NULL COMMENT '部门', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '名字', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ---------------------------- -- Records of t_division (by nanfangzhe) -- ---------------------------- INSERT INTO `t_division` VALUES ('1', '人事部', '小李'); INSERT INTO `t_division` VALUES ('2', '运营部', '红红'); INSERT INTO `t_division` VALUES ('3', '人事部', '小明'); INSERT INTO `t_division` VALUES ('4', '技术部', '阿张'); INSERT INTO `t_division` VALUES ('5', '技术部', '小谢'); INSERT INTO `t_division` VALUES ('6', '人事部', '大壮'); INSERT INTO `t_division` VALUES ('7', '管理部', '老王'); INSERT INTO `t_division` VALUES ('8', '技术部', '老王'); INSERT INTO `t_division` VALUES ('9', '管理部', '小徐'); INSERT INTO `t_division` VALUES ('10', '人事部', '小艺'); INSERT INTO `t_division` VALUES ('11', '人事部', '小林'); INSERT INTO `t_division` VALUES ('12', '技术部', '小春'); INSERT INTO `t_division` VALUES ('13', '人事部', '小南'); INSERT INTO `t_division` VALUES ('14', '技术部', '小方'); INSERT INTO `t_division` VALUES ('15', '技术部', '小泽');
2 相同部门的人员,部员名字进行拼接
SELECT t.division, GROUP_CONCAT(t.name) AS nameListStr FROM t_division as t GROUP BY t.division
3 相同部门的人员,需要在名字上再加上部门的前缀
SELECT t.division, GROUP_CONCAT(CONCAT(t.division,"-", t.name) SEPARATOR ',') AS nameListStr FROM t_division as t GROUP BY t.division
文章小尾巴
文章写作、模板、文章小尾巴可参考:《写作“小心思”》
感谢你看到最后,最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
(文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)