`

group_concat函数详解

    博客分类:
  • SQL
阅读更多

问了好多人,都不知道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)

 

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

 

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('[', GROUP_CONCAT
(ROLE.Role_Name SEPARATOR '],['), ']')) AS ROLENAME
        ,(concat( '[', (
            SELECT
                    GROUP_CONCAT
(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)
    GROUP BY
        EMPLOYEES.EMPID

    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 
分享到:
评论
6 楼 rzh0001 2015-08-09  
thans
5 楼 cicci 2013-10-28  
,超级好博
4 楼 sty00 2013-10-23  
谢谢分享      
3 楼 itzyjr 2012-10-19  
thanks
2 楼 qazxsw123222 2012-07-19  
学习了,谢谢。
1 楼 wrj913 2011-10-13  
对我很有用,谢谢!!!

相关推荐

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    【GROUP_CONCAT】使用之MySQL官方文档翻译

    oracle 创建wm_concat函数

    wm_concat函数在oracle 10G以下版本是没有的,这个就需要我们自己来创建,有需要的就下载下来,直接运行就行了,如果在运行中出中,请分开运行,不要一次性运行哟

    wmsys_wm_concat函数结果拆解

    wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/

    wm_concat函数DDL.zip

    Oracle 11g之后取消了wm_concat函数,12C及以后版本需要使用的话,需要自定义新建这个函数,提供DDL给需要用到的兄弟们。

    oracle 9i 实现wm_concat函数

    oracle 9i 实现wm_concat函数 进行一列多行合并,之间使用,分割

    重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件

    重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数

    解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。 简单来说,用PL/SQL执行下一下几个脚本就可以了。 特别要注意:PL/SQL登录时,要...

    MySQL GROUP_CONCAT限制解决方案

    作用:  GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即...SHOW VARIABLES LIKE 'group_concat_max_len' 操作方法:(如图) 调整长度设置方法: (1)在MySQL配置文件中加入:  文件:my.ini

    Oracle没有WM_CONCAT函数的解决办法.rar

    1、下载三个文件:owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb 2、用sqlplus登录:sqlplus -logon sys/123 as sysdba 3、执行@C:\Users\JOYTRAVEL\Desktop\WMSYS用户\owmaggrb.plb; 如果执行结果报错,说找不...

    12C开始_wm_concat函数.sql

    Oracle从12C版本开始,不支持wm_concat函数,我们可以采取的办法有使用listagg函数代替wm_concat函数,或者为了减小修改程序的工作量,可以通过手工创建wm_concat函数来解决这个问题。

    MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,需要的朋友可以适当参考下

    Oracle新版中不支持 WM_CONCAT的处理方法

    Oracle新版中不支持 WM_CONCAT的处理方法,直接创建一个自定义函数代替

    类似于wmsys.wm_concat的自定义函数clob版

    大家用oracle数据库里面的wmsys.wm_concat函数有没有遇见过字符串缓冲区太小的情况? 针对这种情况我写了个自定义聚合函数 是clob版的。

    解决Oracle没有WM_CONCAT函数.zip

    owmctab.plb、owmaggrs.plb、owmaggrb.plb

    Oracle 11g 重建WMSYS.WM_CONCAT函数

    Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....

    mysql的group_concat函数使用示例

    MySQL中group_concat函数,完整的语法如下: 代码如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’]) 基本查询 代码如下:select * from aa; 代码如下:+——+——+|...

    Oracle12c创建wm_concat函数

    11gr2和12C上已经摒弃了wm_concat函数,当时我们很多程序员在程序中使用了该函数,导致程序出现错误,为了减轻程序员修改程序的工作量,只有通过手工创建个wm_concat函数,来临时解决该问题

    OracleXE中没有WM_CONCAT函数

    包含owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb 三个文件,可解决OracleXE中没有WM_CONCAT函数的问题;解决方案如下:1、下载三个文件:owmctab.plb 、 owmaggrs.plb 、 owmaggrb.plb 2、用sqlplus登录:...

    如何修改Mysql中group_concat的长度限制

    在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据... 使用group_concat_max_len系统变量,你可以设置允许的最大长度。 系统默认的分隔符是逗号 修改方式: SET [SESSION | GLOBAL] g

    oracle替换wm_concat varchar处理为clob处理的方法

    是处理wm_concat中以varchar处理合并列字段过小。 clob 可以加大处理。 oracle 9I oracle 10G 必备

Global site tag (gtag.js) - Google Analytics