SQL程式設計:group by合併結果字串 —> group_concat函式就能行

華麗D轉身發表於2018-10-24

1、表結構

    create table tt(id int,v varchar(30));
     
     
    insert into tt values(1,`a`),(1,`b`),(2,`b`),(2,`c`),(2,`b`),(2,`a`),(3,`a`);
     
     
    mysql> select * from tt;
    +——+——+
    | id | v |
    +——+——+
    | 1 | a |
    | 1 | b |
    | 2 | b |
    | 2 | c |
    | 2 | b |
    | 2 | a |
    | 3 | a |
    +——+——+
    7 rows in set (0.05 sec)

2、問題
一般在合併字串我們可以用concat,但是這個函式主要實現類似字串相加的目的,而且是同一行中的字串的合併。
如果現在要實現把不同行的字串進行合併,要如何實現呢?

3、解決方法:
完全合併

    mysql> select group_concat(v) from tt;
    +—————–+
    | group_concat(v) |
    +—————–+
    | a,b,b,c,b,a,a |
    +—————–+
    1 row in set (0.05 sec)

分組合並

    mysql> select id,group_concat(v) from tt group by id;
    +——+—————–+
    | id | group_concat(v) |
    +——+—————–+
    | 1 | a,b |
    | 2 | b,c,b,a |
    | 3 | a |
    +——+—————–+
    3 rows in set (0.01 sec)

分組、去重合並

    mysql> select id,group_concat(distinct v) from tt group by id;
    +——+————————–+
    | id | group_concat(distinct v) |
    +——+————————–+
    | 1 | a,b |
    | 2 | b,c,a |
    | 3 | a |
    +——+————————–+
    3 rows in set (0.03 sec)

分組、去重、排序合併

    mysql> select id,group_concat(distinct v order by v) from tt group by id;
    +——+————————————-+
    | id | group_concat(distinct v order by v) |
    +——+————————————-+
    | 1 | a,b |
    | 2 | a,b,c |
    | 3 | a |
    +——+————————————-+
    3 rows in set (0.00 sec)

自定義連線符

    mysql> select id,group_concat(v separator `;`) from tt group by id;
    +——+——————————-+
    | id | group_concat(v separator `;`) |
    +——+——————————-+
    | 1 | a;b |
    | 2 | b;c;b;a |
    | 3 | a |
    +——+——————————-+
    3 rows in set (0.01 sec)

———————

相關文章