Tag: left

MySQL: GROUP_CONCAT function

Posted by – December 11, 2013

在 MySQL 上經常遇到如下的資料:

id    value

 1     A

 1     B

 1     C

 2     A

 2     C

這種情況在要輸出報表的時候就覺得很麻煩,一旦 Group By 起來,就失去了 value 的內容。不想丟失 value 的內容也不想出現多筆重複的 id 就得多下幾次 sql 才能取得完整的資料。

今天又是一個偶然在 StackOverflow 上看到 GROUP_CONCAT() 這個沒見過的指令,馬上試試有什麼效果。

SELECT id, GROUP_CONCAT(value) as values FROM table GROUP BY id ORDER BY id

就能得到以下的結果:

id=1, values=A,B,C
id=2, values=A,C

神方便啊,在 MySQL 的文件中有完整的 GROUP_CONCAT 用法,包括可以排序,改變分隔符號。例如:

SELECT id, GROUP_CONCAT(value ORDER BY value DESC SEPARATOR ': ') as values FROM table GROUP BY id ORDER BY id

結果就變這樣:

id=1, values=C: B: A

id=2, values=C: A

製作報表就靠它了。