group_concat函数详解

MySQL中group_concat函数


完整的语法如下:


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

 

基本查询

 

Sql代码 复制代码  收藏代码
  1. select * from aa;  
select * from aa;


+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200 |
|3 | 500 |
+------+------+
6 rows in set (0.00 sec)

 

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

 

Sql代码 复制代码  收藏代码
  1. select id,group_concat(namefrom aa group by id;  
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)

 

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

 

Java代码 复制代码  收藏代码
  1. select id,group_concat(name separator ';') from aa group by id;  
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)

 

以id分组,把去冗余的name字段的值打印在一行,


逗号分隔

 

Sql代码 复制代码  收藏代码
  1. select id,group_concat(distinct namefrom aa group by id;  
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)

 

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

 

Sql代码 复制代码  收藏代码
  1. select id,group_concat(name order by name descfrom aa group by id;  
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)

 

测试sql,项目中用到的。

Sql代码 复制代码  收藏代码
  1. SELECT  
  2.         EMPLOYEES.EMPID   
  3.         ,EMPLOYEES.EMPNAME   
  4.         ,DEPARTMENTS.DEPARTMENTNAME   
  5.         ,EMPLOYEES.DEPTID   
  6.         ,EMPLOYEES.EMPPWD   
  7.         ,EMPLOYEES.INSIDEEMAIL   
  8.         ,EMPLOYEES.OUTSIDEEMAIL   
  9.         ,EMPLOYEES.DELEFLAG   
  10.         ,EMPLOYEES.EMPCLASS   
  11.         ,(CONCAT('[', <SPAN style="COLOR: #ff0000">GROUP_CONCAT</SPAN>   
  12. (ROLE.Role_Name SEPARATOR '],['), ']')) AS ROLENAME   
  13.         ,(concat( '[', (   
  14.             SELECT  
  15.                     <SPAN style="COLOR: #ff0000">GROUP_CONCAT</SPAN>   
  16. (DEPARTMENTS.DEPARTMENTNAME separator '],[')   
  17.                 FROM  
  18.                     EMP_ROLE_DEPT   
  19.                         LEFT JOIN DEPARTMENTS   
  20.                             ON (   
  21.                                 DEPARTMENTS.DEPARTMENTID = EMP_ROLE_DEPT.DEPTID   
  22.                                 AND DEPARTMENTS.DELEFLAG = 0   
  23.                             )   
  24.                 GROUP BY  
  25.                     EMP_ROLE_DEPT.EMPID   
  26.                 HAVING  
  27.                     EMP_ROLE_DEPT.EMPID = EMPLOYEES.EMPID   
  28.         ),']')) AS DEPARTMENTRIGHT   
  29.     FROM  
  30.         EMPLOYEES   
  31.             LEFT JOIN DEPARTMENTS   
  32.                 ON (   
  33.                     DEPARTMENTS.DEPARTMENTID = EMPLOYEES.DEPTID   
  34.                     AND DEPARTMENTS.DELEFLAG = 0   
  35.                 )   
  36.             LEFT JOIN ROLE_EMP   
  37.                 ON (ROLE_EMP.EMP_ID = EMPLOYEES.EMPID)   
  38.             LEFT JOIN ROLE   
  39.                 ON (ROLE_EMP.ROLE_ID = ROLE.ROLE_ID)   
  40. <SPAN style="COLOR: #ff0000">    GROUP BY  
  41.         EMPLOYEES.EMPID</SPAN>   
  42.   
  43.     HAVING  
  44.         EMPLOYEES.EMPID LIKE '%%'  
  45.         AND EMPLOYEES.EMPNAME LIKE '%%'  
  46.         AND EMPLOYEES.DELEFLAG = 0   
  47.         AND (   
  48.             EMPLOYEES.EMPCLASS = '1'  
  49.             OR EMPLOYEES.EMPCLASS = '2'  
  50.         )   
  51.         AND EMPLOYEES.DEPTID = '001' LIMIT 0   
  52.         ,16   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值