当前位置:数据库 > 数据库管理> 正文

mysql中group_concat

时间:2016-7-3类别:数据库

mysql中group_concat

mysql中group_concat

一、语法

  •  
  • 
    GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
    
    		
  •  

    也可以简单的理解

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

    二、group_concat连接字段的长度设置

     

    1、查看服务器中设置

     

  • SQL 代码   复制
  • 
    mysql> show variables like '%group_concat%';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | group_concat_max_len | 1024  |
    +----------------------+-------+
    1 row in set (0.00 sec)
    
    		
  • 以上设置的值说明当前是默认长度1KB

     

    2、改变参数值

    方法一:修改配置文件中参数,新增 group_concat_max_len = 10240


    方法二:在会话中实现,全局或当前session中

     

  • SQL 代码   复制
  • 
    SET GLOBAL group_concat_max_len=10240; 
    SET SESSION group_concat_max_len=10240;
    
    		
  •  

    三、mysql中group_concat函数的实例

     

    1、实例数据

     

  • SQL 代码   复制
  • 
    select * from aa;  
    
    +------+------+
    | id| name |
    +------+------+
    |1 | 10|
    |1 | 20|
    |1 | 20|
    |2 | 20|
    |3 | 200 |
    |3 | 500 |
    +------+------+
    6 rows in set (0.00 sec)
    
    		
  •  

    2、以id分组,把name字段的值打印在一行,逗号分隔(默认)

     

  • SQL 代码   复制
  • 
    select id,group_concat(name) from aa group by id; 
    
    +------+--------------------+
    | id| group_concat(name) |
    +------+--------------------+
    |1 | 10,20,20|
    |2 | 20 |
    |3 | 200,500|
    +------+--------------------+
    3 rows in set (0.00 sec)
    
    		
  •  

    3、以id分组,把name字段的值打印在一行,分号分隔

  •  
  •  
  • SQL 代码   复制
  • 
    select id,group_concat(name separator ';') from aa group by id;  
    
    +------+----------------------------------+
    | id| group_concat(name separator ';') |
    +------+----------------------------------+
    |1 | 10;20;20 |
    |2 | 20|
    |3 | 200;500 |
    +------+----------------------------------+
    3 rows in set (0.00 sec)
    
    		
  •  

    4、以id分组,把去冗余的name字段的值打印在一行,逗号分隔

  •  
  •  
  • SQL 代码   复制
  • 
    select id,group_concat(distinct name) from aa group by id; 
    
    +------+-----------------------------+
    | id| group_concat(distinct name) |
    +------+-----------------------------+
    |1 | 10,20|
    |2 | 20 |
    |3 | 200,500 |
    +------+-----------------------------+
    3 rows in set (0.00 sec)
    
    		
  •  

    5、以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序

  •  
  •  
  • SQL 代码   复制
  • 
    select id,group_concat(name order by name desc) from aa group by id;  
    
    +------+---------------------------------------+
    | id| group_concat(name order by name desc) |
    +------+---------------------------------------+
    |1 | 20,20,10 |
    |2 | 20|
    |3 | 500,200|
    +------+---------------------------------------+
    3 rows in set (0.00 sec)
    
    		
  •  

    四、mysql中group_concat使用注意事项

     

    1、int字段的连接陷阱

    连接起来的字段如果是int型,一定要转换成char再拼起来,否则在你执行后返回的将不是一个逗号隔开的串,而是byte[]。

  •  
  •  
  • SQL 代码   复制
  • 
    --例如:id 为整型
    
    select group_concat(id) from t_ip 返回byte[]
    
    select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串
    
    select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串
    
    		
  •  

    2、group_concat的长度有限制

    用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但是这个长度是可以设置的,可以使用group_concat_max_len系统变量,你可以设置允许的最大长度。

    具体设置方法,详见本文第二点。

     

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐