添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱跑步的鸡蛋  ·  ubuntu安装samba失败 ...·  2 周前    · 

group_concat函数使用

group_concat([DISTINCT] 要连接字段 [Order BY ASC(升序)/DESC(降序) 排序字段] [Separator '分隔符'])
  • 表结构及其数据
    在这里插入图片描述
  • 这时大家注意height和classid字段,现在的需求是将每个班级的学生身高显示在一行且不重复,身高之间以分号进行分隔,那么group_concat函数就派上用场了。
SELECT
	a.classid,
	GROUP_CONCAT( a.height ) 
	`tbl_middle_student` a 
GROUP BY
	a.classid;
  • 现在每个classid下学生的身高显示在一行,默认用逗号隔开。但是现在有重复数据,接下来就用关键字DISTINCT进行去重。
SELECT
	a.classid,
	GROUP_CONCAT( DISTINCT a.height ) 
	`tbl_middle_student` a 
GROUP BY
	a.classid;
  • 现在每个classid下学生的身高显示在一行,也达到了去重效果,那么接下来我们用ORDER BYDESC到达身高降序的效果。
SELECT
	a.classid,
	GROUP_CONCAT( DISTINCT a.height ORDER BY a.height DESC) 
	`tbl_middle_student` a 
GROUP BY
	a.classid;
  • 接下来我们用SEPARATOR设置分隔一下分隔符。
SELECT
	a.classid,
	GROUP_CONCAT( DISTINCT a.height ORDER BY a.height DESC SEPARATOR ";" ) 
	`tbl_middle_student` a 
GROUP BY
	a.classid;

结果集:
在这里插入图片描述
这样我们的数据就按班级进行分组,以不同身高进行降序排列,并用分号进行分隔了。

(1)、 GROUP_CONCAT有个最大长度的限制,超过最大长度则会会被截断,那么可以通过下面的语句获得:

 SELECT @@global.group_concat_max_len;
 show variables like "group_concat_max_len";

(2)、在MySQL配置文件中my.conf或my.ini中添加:

    #[mysqld]
  group_concat_max_len=102400

(3)、重启MySQL服务

where 1 = 1 and p_name in <foreach collection="nameArray" index="index" item="item" close=")" open="(" separator=","> #{item} </foreach> MySQL中的GROUP_CONCAT函数用于将查询结果集中的多行数据合并为一行,常用于统计分组聚合操作。然而,在使用GROUP_CONCAT时,可能会遇到截断问题,即合并后的字符串长度超过了MySQL的配置限制导致结果不完整。接下来,我们还需要了解如何处理合并后的字符串中可能存在的特殊字符。例如,换行符会被转义为。需要注意的是,增加最大长度限制和开启反斜杠转义模式可能会对性能产生一定的影响。如果查询结果集中的数据量较大,或者需要合并的字段长度较长,那么1024的限制可能会不够用,导致结果被截断。 SQL查询中,会碰到将group by之后的数据拼接成字符串的场景。这时就该GROUP_CONCAT函数出马了,不得不说,好用是真好用,但是也是真。因为默认GROUP_CONCAT函数返回的结果大小被MySQL默认限制为1024(字节)的长度。查看方式:show variables like "group_concat_max_len";这时就需要修改 group_concat_max_len... 1、group_concat()有长度限制1024, 需要修改配置group_concat_max_len,如果超过大小会被截断; 2、group_concat()可以对这个组的值来进行排序再连接成字符串, eg:GROUP_CONCAT(name ORDER BY id DESC)  3、group_concat()改变分隔符: GROUP_CONCAT(name SEPARATOR '... 最近在公司实习的时候有一个很普通的需求就是要根据用户给出的查询条件在数据库中查出所有符合的结果,由于每个用户存储的数据在数据库中对应着许多条记录,因此我想到了之前在学校使用过的group_concat()函数,这个函数是可以根据group by的键将数据库中符合条件的数据相连。因为在学校的时候数据量并没有很大,因此没有出现问题,但是在最近的使用中,我发现结果怎么也对不上,一直都是缺失的。后来经过断... 问题描述:在mysql中编写存储过程时用到了GROUP_CONCAT函数,然后执行编写好的存储过程发现查询出来的数据不完整, 把存储过程里的sql拿出来单独执行,又没有一点问题,反复查询了好多博文,解释的好像是说GROUP_CONCAT函数拼接出来的文本有长度限制。但我觉得又很矛盾,为什么单独执行sql就可以查询出完整的数据,执行存储过程就查询出来数据不完整。 经过多次测试:GROUP_CON... 项目中权限相关的信息是用group_concat()函数查询出来的,而mysql中对此函数查询出来的做了长度限制,即默认1024 此时如果group_concat出来会对超过的结果进行截取. 周师项目:视图查询 SELECT CONCAT("case ",GROUP_CONCAT(CONCAT("when JGDM = '",t.`DM`,"' then '",t.`MC`,"'") SEPARATOR ' ')," else '' end as JGDM ,") FRO mysqlgroup_concat函数查询结果默认长度1024,超过这个长度的结果将不显示,使用的时候可能会遇到莫名其妙丢失的问题: 解决方法一: 在mysql的配置文件“my.ini”或“my.conf”加上以下语句,然后重启mysql服务即可: group_concat_max_len=102400 如果这个值设为-1,表示为最大值(4294967295) 解决方法二: 执行以下sql语句: SET GLOBAL group_concat_max_len=102400; SET SESSION gro