`

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 函数详解 #### 一、概述 `GROUP_CONCAT` 是 MySQL 中一个非常实用的聚合函数,主要用于将来自同一分组的多个值连接成一个字符串。这一功能在许多场景下都非常有用,例如汇总数据、创建列表等。 ...

    MySQL拼接字符串函数GROUP_CONCAT详解

    MySQL中的GROUP_CONCAT函数是一个非常实用的聚合函数,主要用于在分组查询中将同一组内的多个值合并为一个字符串,通常用于数据汇总和报告。它能够处理非NULL值,并且可以进行排序、去重和自定义分隔符,极大地提高...

    DB2函数名称及举例

    ### DB2函数名称及举例详解 #### 一、概述 在数据库管理与查询过程中,DB2作为一款功能强大的关系型数据库管理系统,提供了丰富的内置函数来帮助用户高效地处理数据。这些函数涵盖了数学运算、字符串操作、日期...

    Mysql的GROUP_CONCAT()函数使用方法

    ### MySQL的GROUP_CONCAT()函数使用详解 在MySQL中,`GROUP_CONCAT()`是一个非常实用且强大的聚合函数,主要用于将一组值连接成一个字符串。它常用于查询中,特别是需要将多个行的数据合并到一行时。本文将详细介绍...

    oracle合并列的函数wm_concat的使用详解

    最后,关于可能感兴趣的相关文章,包括Oracle中多行记录合并、连接、聚合字符串的不同方法,以及如何在Oracle中实现类似功能的其他技术,如使用`GROUP_CONCAT`(这是MySQL中的一个函数,Oracle没有直接对应的内置...

    详解MySQL中concat函数的用法(连接字符串)

    总结来说,MySQL中的`CONCAT`、`CONCAT_WS`和`GROUP_CONCAT`函数提供了强大的字符串处理能力,允许你灵活地连接和组合字符串,以满足不同的查询需求。在处理大量文本数据时,这些函数是数据库查询中不可或缺的一部分...

    mysql实现查询数据并根据条件更新到另一张表的方法示例

    4. **GROUP_CONCAT函数详解**: `GROUP_CONCAT`函数在MySQL中用于将同一组的某个列的值合并为一个字符串,用指定的分隔符(默认为逗号)分隔。它接受几个可选参数: - `DISTINCT`:去除重复的值。 - `ORDER BY`:...

    详解mysql中的concat相关函数

    总结,`CONCAT`、`CONCAT_WS`和`GROUP_CONCAT`都是MySQL中处理字符串连接的重要函数,它们在不同的场景下提供了灵活的数据组合方式。理解并熟练使用这些函数,可以提升你在数据库操作中的效率,特别是在处理复杂的...

    mysql字符串连接函数

    ### MySQL字符串连接函数详解 在处理数据库中的字符串操作时,MySQL提供了多种强大的工具来帮助我们进行数据处理。本文主要介绍几种常用的字符串连接函数,包括`CONCAT()`、`CONCAT_WS()`以及`GROUP_CONCAT()`函数...

    详细sqli-labs(1-20)通关讲解

    - 使用 `group_concat()` 函数将表名合并成一条记录输出。 - **第五步**:获取特定表的字段名。 - 输入:`?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name...

    SQLi-LABS Page-1(Basic Challenges)1-22关

    ### SQLi-LABS Page-1 (Basic Challenges)1-22关详解 #### Less1: GET 字符串型基于错误的单引号的注入 在本关中,我们需要利用一个带有`id`参数的GET请求来进行SQL注入。当尝试输入`id=1`时,并在URL末尾添加单...

    MySQL常用聚合函数详解

    一、AVG AVG(col) 返回指定列的平均值 二、COUNT COUNT(col) 返回指定列中非NULL值...GROUP_CONCAT([DISTINCT] expr [,expr …]  [ORDER BY {unsigned_integer | col_name | expr}  [ASC | DESC] [,col_name …]]  

    PLSQL单行函数和组函数详解

    但有些函数如`CONCAT`、`DECODE`、`DUMP`、`NVL`和`REPLACE`在遇到NULL时会返回非NULL值。`NVL`函数尤其重要,因为它允许我们为NULL值提供默认值。例如,`NVL(bonus, 0)`会在奖金为空(NULL)时将其替换为0。 在...

    php手工注入.doc

    3. **使用`GROUP_CONCAT`和`LIMIT`**:为了快速获取所有表名,攻击者可以使用`GROUP_CONCAT`函数将多个表名合并为一个字符串,然后通过`CONCAT`函数在结果中插入分隔符。这比逐个尝试`LIMIT`更有效率。 4. **字段...

    程序员面试--选择题.pdf,这是一份不错的文件

    4. 分组与聚合函数:第45题中的答案二使用了GROUP BY语句来按照year进行分组,并使用GROUP_CONCAT函数将同一年份的所有amount组合成一个字符串,展示了SQL的聚合功能。 5. 最大值查询:第46题要求查找薪水高于其...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    在复杂的查询需求下,比如我们需要获取每个`name`对应的`id`列表,这时`GROUP_CONCAT`函数就派上了用场。`GROUP_CONCAT`可以将同一组内的一列值连接成一个字符串,结合`DISTINCT`,可以实现对多个字段的高效处理: ...

    java_lang包详解.pdf

    《java_lang包详解》 Java语言的核心库之一就是java.lang包,它包含了Java程序中最基础、最核心的类和接口。由于这个包是自动导入到每个Java程序中的,所以理解和掌握其中的类和接口对于编写Java代码至关重要。下面...

Global site tag (gtag.js) - Google Analytics