group_concat函数详解

https://blog.csdn.net/ys410900345/article/details/44828571
问了好多人,都不知道group_concat这个函数。

这个函数好啊,能将相同的行组合起来,省老事了。

MySQL中group_concat函数

完整的语法如下:

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

基本查询

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字段的值打印在一行,逗号分隔(默认)

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)

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字段的值打印在一行,

逗号分隔

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排倒序

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,项目中用到的。

     SELECT  
            EMPLOYEES.EMPID  
            ,EMPLOYEES.EMPNAME  
            ,DEPARTMENTS.DEPARTMENTNAME  
            ,EMPLOYEES.DEPTID  
            ,EMPLOYEES.EMPPWD  
            ,EMPLOYEES.INSIDEEMAIL  
            ,EMPLOYEES.OUTSIDEEMAIL  
            ,EMPLOYEES.DELEFLAG  
            ,EMPLOYEES.EMPCLASS  
            ,(CONCAT('[', <span style="color: #ff0000;">GROUP_CONCAT</span>  
    (ROLE.Role_Name SEPARATOR '],['), ']')) AS ROLENAME  
            ,(concat( '[', (  
                SELECT  
                        <span style="color: #ff0000;">GROUP_CONCAT</span>  
    (DEPARTMENTS.DEPARTMENTNAME separator '],[')  
                    FROM  
                        EMP_ROLE_DEPT  
                            LEFT JOIN DEPARTMENTS  
                                ON (  
                                    DEPARTMENTS.DEPARTMENTID = EMP_ROLE_DEPT.DEPTID  
                                    AND DEPARTMENTS.DELEFLAG = 0  
                                )  
                    GROUP BY  
                        EMP_ROLE_DEPT.EMPID  
                    HAVING  
                        EMP_ROLE_DEPT.EMPID = EMPLOYEES.EMPID  
            ),']')) AS DEPARTMENTRIGHT  
        FROM  
            EMPLOYEES  
                LEFT JOIN DEPARTMENTS  
                    ON (  
                        DEPARTMENTS.DEPARTMENTID = EMPLOYEES.DEPTID  
                        AND DEPARTMENTS.DELEFLAG = 0  
                    )  
                LEFT JOIN ROLE_EMP  
                    ON (ROLE_EMP.EMP_ID = EMPLOYEES.EMPID)  
                LEFT JOIN ROLE  
                    ON (ROLE_EMP.ROLE_ID = ROLE.ROLE_ID)  
    <span style="color: #ff0000;">    GROUP BY  
            EMPLOYEES.EMPID</span>  
      
        HAVING  
            EMPLOYEES.EMPID LIKE '%%'  
            AND EMPLOYEES.EMPNAME LIKE '%%'  
            AND EMPLOYEES.DELEFLAG = 0  
            AND (  
                EMPLOYEES.EMPCLASS = '1'  
                OR EMPLOYEES.EMPCLASS = '2'  
            )  
            AND EMPLOYEES.DEPTID = '001' LIMIT 0  
            ,16   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值