最新文章
- MySQL中, group by 和 order by 一起使用会有排序问题,group by 和 order by 同时使用时要注意的地方
- Vue学习笔记(10) ——Vue组件中的data和methods
- Vue学习笔记(9) ——Vue组件创建的几种方式
- Vue学习笔记(8) ——Vue实例的生命周期
- Vue学习笔记(7) —— 过滤器 filter的基本使用
- Vue学习笔记(6) ——v-if指令和v-show指令
- Vue学习笔记(5) —— v-for指令和key属性
- Vue学习笔记(5) —— Vue中样式-class样式和style样式
- Vue学习笔记(4) —— v-model指令,双向数据绑定
- Vue学习笔记(3) —— Vue事件修饰符
关注我

在线咨询
x
有什么可以帮到你

点击咨询
MySQL 中 GROUP_CONCAT() 的使用
- 分类:MySQL技术
- 时间:2020-07-21
- 共743人围观
简介GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']), 使用 GROUP_CONCAT()函数必须对源数据进行分组,否则所有数据会被合并成一行
1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
注意:使用 GROUP_CONCAT()函数必须对源数据进行GROUP分组,否则所有数据会被合并成一行。
首先,建立一张表
DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '', `course_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '' ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
给这张表插入一些数据
INSERT INTO `course` VALUES ('张三', 'PHP'); INSERT INTO `course` VALUES ('张三', 'MySQL'); INSERT INTO `course` VALUES ('张三', 'JavaScript'); INSERT INTO `course` VALUES ('李四', 'HTML'); INSERT INTO `course` VALUES ('李四', 'CSS'); INSERT INTO `course` VALUES ('王五', 'Linux'); INSERT INTO `course` VALUES ('王五', 'Redis');
简单的查询
select t.name as '姓名',t.course_name as '课程' from course t;
但是这样同一个名字出现多次,看上去非常不直观。有没有更直观的方法,既让每个名字都只出现一次,又能够显示所有的名字相同人的数据呢?——使用GROUP_CONCAT()。
需求: 将每个人的课程合并为一行数据
select t.name as '姓名',GROUP_CONCAT(t.course_name) as '课程' from course t group by t.name;
修改分隔符,用 #号 代替 逗号
select t.name as '姓名',GROUP_CONCAT(t.course_name order by t.course_name SEPARATOR '#') as '课程' from course t group by t.name;