1. 程式人生 > >SQL 合併多個記錄 --GROUP_CONCAT 用法

SQL 合併多個記錄 --GROUP_CONCAT 用法

例子:

    表資料:(SELECT id,title FROM doc)

id title
2  aa
2  cc
3  dd
……

期望返回結果:"aa,cc,dd"

執行語句:SELECT GROUP_CONCAT(title) AS title FROM doc

期望返回結果:"aa,cc"

執行語句:SELECT id,GROUP_CONCAT(title) AS title FROM doc GROUP BY id

這裡採用了 GROUP_CONCAT 函式。下面是關於該函式的說明:

該函式返回帶有來自一個組的連線的非NULL值的字串結果。其完整的語法如下所示: 

GROUP_CONCAT([DISTINCT] expr

[,expr ...]

             [ORDER BY {unsigned_integer | col_name | expr}

                 [ASC | DESC] [,col_name ...]]

             [SEPARATOR str_val])

示例:

mysql> SELECT student_name,

    ->     GROUP_CONCAT(test_score)

    ->     FROM student

    ->     GROUP BY student_name;

Or:

mysql> SELECT student_name,

    ->     GROUP_CONCAT(DISTINCT test_score

    ->               ORDER BY test_score DESC SEPARATOR ' ')

    ->     FROM student

    ->     GROUP BY student_name;

在MySQL中,你可以獲取表示式組合的連線值。你可以使用DISTINCT刪去重複值。假若你希望多結果值進行排序,則應該使用  ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關鍵詞新增到你要用ORDER BY 子句進行排序的列名稱中。預設順序為升序;可使用ASC將其明確指定。   SEPARATOR 後面跟隨應該被插入結果的值中間的字串值。預設為逗號 (‘,’)。通過指定SEPARATOR

'' ,你可以刪除所有分隔符。

使用group_concat_max_len系統變數,你可以設定允許的最大長度。  程式中進行這項操作的語法如下,其中 val 是一個無符號整數:

SET [SESSION | GLOBAL] group_concat_max_len = val;

若已經設定了最大長度, 則結果被截至這個最大長度。