Tag: group by

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

製作報表就靠它了。

MySQL: How To Count Rows But Still Show All The Rows?

Posted by – October 21, 2013

之前寫過 MySQL: Displaying Rows With COUNT 0 With Group By,用於強制顯示 Count() 為 0 的資料。最近又看到另一種寫法,因為我自己很少這麼寫,所以留個筆記。

SELECT col1,
       (SELECT COUNT(*) 
          FROM table1 t1 
         WHERE t1.id = t2.t1_id) as Total
  FROM table2 t2
GROUP BY t2.id;

把子查詢放在 SELECT 敘述。試了一下,這種寫法的查詢速度會比單純的 left join 慢上許多,實際應用要視資料筆數來決定。

MySQL: Displaying Rows With COUNT 0 With Group By

Posted by – October 14, 2011

MySQL 裡用 Count 和 Group By 來做統計是常用的寫法。舉例來說,以下兩個 table,一個紀錄公司行號的資料,一個紀錄員工資料。

Company
id company
1 Google
2 Microsoft
Employee
id employee company
1 Jack Google
2 Eric Microsoft

More