MySQLgroup_concat()的用法

MySQLgroup_concat()的用法

group_concat() 的全部用法

group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

好了我们来一个一个测试
首先我们建一个测试表

CREATE TABLE `demo` (
  `id` varchar(50) NOT NULL,
  `type` tinyint(3) DEFAULT '0' COMMENT '类型:0菜鸡,1入门,2大神',
  `name` varchar(20) DEFAULT NULL COMMENT '姓名',
  `px` int(11) DEFAULT '1' COMMENT '排序字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们来插入一些测试数据

INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ae548-1bc6-11ea-b5cf-84306463c5b2', '0', '小王','1');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cc79d-1bc6-11ea-b5cf-84306463c5b2', '0', '小王','2');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccda3-1bc6-11ea-b5cf-84306463c5b2', '1', '小王','3');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cceb8-1bc6-11ea-b5cf-84306463c5b2', '2', '小王','4');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccf52-1bc6-11ea-b5cf-84306463c5b2', '0', '小流','5');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796ccfce-1bc6-11ea-b5cf-84306463c5b2', '0', '小集','6');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd049-1bc6-11ea-b5cf-84306463c5b2', '1', '小皮','7');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd0ba-1bc6-11ea-b5cf-84306463c5b2', '1', '小求','8');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd140-1bc6-11ea-b5cf-84306463c5b2', '2', '小海','9');
INSERT INTO `demo`.`demo` (`id`, `type`, `name`,`px`) VALUES ('796cd1ac-1bc6-11ea-b5cf-84306463c5b2', '2', '小蛋','10');

注意:使用group_concat 要配合使用group by
1.将每个分类有哪些人查出来,并显示在一起

SELECT
	CASE type
WHEN 0 THEN
	'菜鸡'
WHEN 1 THEN
	'入门'
WHEN 2 THEN
	'大神'
ELSE
	'菜鸡'
END AS typename,
 GROUP_CONCAT(NAME)
FROM
	demo
GROUP BY
	type

输出
在这里插入图片描述
我们可以看到好像有重复的名字,有时候我们相同名字字需要显示一次这时候我们可以这样写

SELECT
	CASE type
WHEN 0 THEN
	'菜鸡'
WHEN 1 THEN
	'入门'
WHEN 2 THEN
	'大神'
ELSE
	'菜鸡'
END AS typename,
 GROUP_CONCAT(DISTINCT NAME )
FROM
	demo
GROUP BY
	type

输出
在这里插入图片描述
当我们想吧名称按照排序显示时

SELECT
	CASE type
WHEN 0 THEN
	'菜鸡'
WHEN 1 THEN
	'入门'
WHEN 2 THEN
	'大神'
ELSE
	'菜鸡'
END AS typename,
 GROUP_CONCAT(DISTINCT NAME ORDER BY px)
FROM
	demo
GROUP BY
	type

输出
在这里插入图片描述
当我们不想用,号分隔,想用;时

SELECT
	CASE type
WHEN 0 THEN
	'菜鸡'
WHEN 1 THEN
	'入门'
WHEN 2 THEN
	'大神'
ELSE
	'菜鸡'
END AS typename,
 GROUP_CONCAT(DISTINCT NAME ORDER BY px SEPARATOR ';')
FROM
	demo
GROUP BY
	type

输出
在这里插入图片描述

修改group_concat默认长度限制
解决办法:
(1)使用sql语句(亲测可用) 缺点数据库重启后会失效
SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

(2)修改配置文件
在mysql配置文件中添加如下这句,修改配置文件后记得需要重启mysql服务
group_concat_max_len = 102400

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值