>

MySQL中group_concat函数深刻掌握,用SQL将查询出来的

- 编辑:www.bifa688.com -

MySQL中group_concat函数深刻掌握,用SQL将查询出来的

用SQL将查询出来的多列的值拼接成一个字符串

Concat Concat_ws

本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。
MySQL中group_concat函数
完整的语法如下:
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
基本查询
mysql> 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字段的值打印在一行,逗号分隔(默认)
mysql> 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字段的值打印在一行,分号分隔
mysql> select id,group_concat(name separator ';') from aa group by id;
------ ----------------------------------
| id| group_concat(name separator ';') |
88bifa必发唯一官网, ------ ----------------------------------
|1 | 10;20;20 |
|2 | 20|
|3 | 200;500 |
------ ----------------------------------
3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行,
逗号分隔
mysql> 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排倒序
mysql> 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)
使用group_concat_max_len系统变量,你可以设置允许的最大长度。 程序中进行这项操作的语法如下,其中 val 是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。
将环境变量group_concat_max_len 增大。默认是1024.我就设置了session级的环境变量将其变为2048(不够用再加大)。解决该问题

 

mysql sql 字符连接函数Concat Concat_ws
1、Concat()函数
    1.1 MySQL的concat函数可以连接一个或者多个字符串,如
        mysql> select concat('10');
        --------------
        | concat('10') |
        --------------
        | 10           |
        --------------
       1 row in set (0.00 sec)

group_concat(name) 。 MySQL中group_concat函数 完整的语法如下: group_concat([DISTI...

MySQL中:

       mysql> select concat('11','22','33');
        ------------------------
        | concat('11','22','33') |
        ------------------------
        | 112233                 |
        ------------------------

 

       1 row in set (0.00 sec)

[sql] 

       而Oracle的concat函数只能连接两个字符串

-- 单列拼接,先查出一行,再加上逗号,接着拼接 查出的下一行  

        SQL> select concat('11','22') from dual;

select group_concat(E.SUPPORT)  

   1.2 MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

from ENGINES E  

        mysql> select concat('11','22',null);
        ------------------------
        | concat('11','22',null) |
        ------------------------
        | NULL                   |
        ------------------------
       1 row in set (0.00 sec)

where E.XA IN('YES','NO')  

       而Oracle的concat函数连接的时候,只要有一个字符串不是NULL,就不会返回

--结果如下:YES,YES,YES,YES,YES,YES,DEFAULT,YES  

NULL

  

        SQL> select concat('11',NULL) from dual;
       CONCAT
       --
       11

-- 将查询的结果中的 "," 号,替换成 "**" 号   

2、concat_ws()函数, 表示concat with separator,即有分隔符的字符串连接
    如连接后以逗号分隔
        mysql> select concat_ws(',','11','22','33');

select REPLACE(group_concat(E.SUPPORT),',','**')  

        -------------------------------
        | concat_ws(',','11','22','33') |
        -------------------------------
        | 11,22,33                      |
        -------------------------------
       1 row in set (0.00 sec)

from ENGINES E  

   和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL
        mysql> select concat_ws(',','11','22',NULL);
        -------------------------------
        | concat_ws(',','11','22',NULL) |
        -------------------------------
        | 11,22                         |
        -------------------------------
       1 row in set (0.00 sec)

where E.XA IN('YES','NO')  

3、group_concat()可用来行转列, Oracle没有这样的函数

--结果如下:YES**YES**YES**YES**YES**YES**DEFAULT**YES  

    完整的语法如下
    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段]

  

[Separator '分隔符'])
   如下例子
    mysql> select * from aa;

-- 将查询的结果中 重复 的记录 去掉,只剩一条记录,然后再拼接  

    ------ ------
    | id   | name |
    ------ ------
    |    1 | 10   |
    |    1 | 20   |
    |    1 | 20   |
    |    2 | 20   |
    |    3 | 200  |
    |    3 | 500  |
    ------ ------
   6 rows in set (0.00 sec)
   3.1 以id分组,把name字段的值打印在一行,逗号分隔(默认)
       mysql> select id,group_concat(name) from aa group by id;
        ------ --------------------
        | id   | group_concat(name) |
        ------ --------------------
        |    1 | 10,20,20           |
        |    2 | 20                 |
        |    3 | 200,500            |
        ------ --------------------

select group_concat(DISTINCT(E.SUPPORT))  

       3 rows in set (0.00 sec)

from ENGINES E  

   3.2 以id分组,把name字段的值打印在一行,分号分隔
        mysql> select id,group_concat(name separator ';') from aa group by

where E.XA IN('YES','NO')  

id;
        ------ ----------------------------------
        | id   | group_concat(name separator ';') |
        ------ ----------------------------------
        |    1 | 10;20;20                         |
        |    2 | 20                               |
        |    3 | 200;500                          |
        ------ ----------------------------------

--结果如下:YES,DEFAULT  

       3 rows in set (0.00 sec)

  

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

-- 多列拼接,同一行的先拼接,再加上逗号,接着拼接下一行  

        mysql> select id,group_concat(distinct name) from aa group by id;

select group_concat(E.ENGINE,E.SUPPORT)  

        ------ -----------------------------
        | id   | group_concat(distinct name) |
        ------ -----------------------------
        |    1 | 10,20                       |
        |    2 | 20                          |
        |    3 | 200,500                     |
        ------ -----------------------------

from ENGINES E  

       3 rows in set (0.00 sec)

where E.XA IN('YES','NO')  

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

--结果如下:MRG_MYISAMYES,MyISAMYES,BLACKHOLEYES,CSVYES,MEMORYYES,ARCHIVEYES,InnoDBDEFAULT,PERFORMANCE_SCHEMAYES  

        mysql> select id,group_concat(name order by name desc) from aa group

 

by id;

MySQL中: [sql] -- 单列拼接,先查出一行,再加上逗号,接着拼接 查出的下一行 select group_co...

        ------ ---------------------------------------
        | id   | group_concat(name order by name desc) |
        ------ ---------------------------------------
        |    1 | 20,20,10                              |
        |    2 | 20                                    |
        |    3 | 500,200                               |
        ------ ---------------------------------------

       3 rows in set (0.00 sec)

4、repeat()函数,用来复制字符串,如下'ab'表示要复制的字符串,2表示复制的份数

    mysql> select repeat('ab',2);

    ----------------
    | repeat('ab',2) |
    ----------------
    | abab           |
    ----------------

   1 row in set (0.00 sec)

   又如
    mysql> select repeat('a',2);

    ---------------
    | repeat('a',2) |
    ---------------
    | aa            |
    ---------------
   1 row in set (0.00 sec)

 

Concat_ws mysql sql 字符连接函数Concat Concat_ws 1、Concat()函数 1.1 MySQL的concat函数可以连接一个或者多个字符串,如 mysql select concat('10'); ----...

本文由88bifa必发唯一官网发布,转载请注明来源:MySQL中group_concat函数深刻掌握,用SQL将查询出来的