MYSQL在查询统计的时候怎么把其它字段的值取出来-group_concat函数 及 小心mysql中的group_concat函数结果有大小限制

一、MYSQL在查询统计的时候怎么把其它字段的值取出来-group_concat函数

    比如我们现在有一张文章表article,我们需要根据分章分类查询出各类文章有多少遍。简单的SQL如下(ar_cid是文章分类ID):

select ar_cid,count(*) as cidnum from ke_article group by ar_cid order by cidnum desc;

    然而如果想在MYSQL查询的同时,想知道每个分类下的有哪些文章ID,怎么实现呢?注意是同时,而不是另外再执行SQL查询,如果你不知道这个group_concat这个函数,或许你真想不出好办法了。所以此时group_concat函数功能真的很强大。SQL如下:

select ar_cid,count(*) as cidnum,group_concat(id) as ids from ke_article group by ar_cid order by cidnum desc;

    MySQL中的group_concat函数具有连接字段,使得多个值显示为一行,默认分隔符号是逗号, 并且在使用的时候还可以指定排序,完整的语法如下:

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

    适合在做一些聚合查询的同时又要取出字段详细数据,这功能在使用时候还可以有更灵活的功能,比如上面的查询,如果我们想在知道ID的情况下还想知道另外一个字段的内容,并且要和文章ID一一对应起来,此时可以将另外一个字段也使用group_concat连接,取出来之后这两个字段的数据后以逗号分隔,它们就是一一对应的关系了。上面的SQL查询结果示例如下:

二、 小心mysql中的group_concat函数结果有大小限制

    在查询mysql时,group_concat可以把结果中的字段以指定字符串连接起来,但在使用时一定要小心,mysql中的group_concat函数结果有大小限制,默认是1024字节。下面的SQL是执行一个带有group_concat函数的查询,计算得到group_concat函数得到的结果字段的大小,我的数据表比较大,总共有30多万条记录,type值只有4种,即每个type平均也有8万数据,看下面SQL和查询结果:

select type,allnum,length(ids) from (
select type,count(*) as allnum,group_concat(id) as ids from staff GROUP BY type order by FIELD(type,3,1,2,0) limit 4
) as temp;

     查询结果截图:

    因为每个type平均也有8万条数据,ID值肯定不只1024,可见group_concat的当前限制即是1024.通过mysql查询命令:

show variables like 'group_concat_max_len';

    可看到当前的变量设置值为:1024,如下图:

    而如果我们使用命令:set group_concat_max_len=2048; 修改这个配置值之后,上面的SQL查询结果也会变成相应的值。截图如下:

   如果你有权限可以执行:SET GLOBAL group_concat_max_len = ***; 本文上方关于group_concat函数的介绍,group_concat除了上面的基本功能外,还可以实现排序和指定连接符号、连接前进行排序处理等。SQL示例如下:

select type,count(*) as allnum,group_concat(id separator ':') as ids from staff GROUP BY type;
select type,count(*) as allnum,group_concat(id order by id desc separator ':') as ids from staff GROUP BY type;
  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值