01 group_concat函数的使用 一对多场景,将多条记录合并成一条记录展示
0X 01 背景
有一张学生表,表结构如下所示

CREATE TABLE `student`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stu_id` int(11) NOT NULL,
  `stu_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
  `cls_id` int(11) NULL DEFAULT NULL COMMENT '班级ID',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
数据内容如下所示

INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `cls_id`) VALUES (1, 1001, '赵云', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `cls_id`) VALUES (2, 1002, '张飞', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `cls_id`) VALUES (3, 1003, '关羽', 1);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `cls_id`) VALUES (4, 2001, '司马懿', 2);
INSERT INTO `student`(`id`, `stu_id`, `stu_name`, `cls_id`) VALUES (5, 2002, '夏侯惇', 2);
0X 02 目标
查看展示每个班(cls_id)的人,效果如下:赵云、张飞、关羽 ,司马懿、夏侯惇 。
0X 03 操作
使用group_concat()函数,返回一个字符串结果,该结果由分组中的值连接组合而成。
GROUP_CONCAT(
   [ DISTINCT ] expr [,
   expr...] [ 
   ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC ] [,
   col...] ] [ SEPARATOR str_val ]
 )
- 通过distinct可以排除重复值
- 如果希望对结果中的值进行排序,可以使用order by字句
- separator指定分组元素的连接符,默认是- ,
- group_concat_max_len设置一个最大的长度
SELECT
	cls_id,
	group_concat( stu_name ORDER BY stu_name SEPARATOR '、' ) AS members_ordered,
	group_concat( stu_name SEPARATOR '-' ) AS members 
FROM
	student 
GROUP BY
	cls_id

    知行合一
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号