mysql-concat擴展函數

MySQL中concat_ws函數
  使用方法: 
  CONCAT_WS(separator,str1,str2,...)

  CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一個參數是其它參數的分隔符。分隔符的位置放在要連接的兩個字符     串之間。分隔符可以是一個字符串,也可以是其它參數。
  注意:
  ①.如果分隔符爲 NULL,則結果爲 NULL。

  ②.函數會忽略任何分隔符參數後的 NULL 值。

  如連接後以逗號分隔 
  mysql> select concat_ws(',','11','22','33');

  +-------------------------------+

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

  和MySQL中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)


MySQL中group_concat函數

   group_concat()可用來行轉列, Oracle沒有這樣的函數
   完整的語法如下:
   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 ';') |
   +------+----------------------------------+
    |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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章