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

用下列查詢:

SELECT c.company, count(e.company) as employees
FROM company c
LEFT JOIN employee e ON c.id = e.company
GROUP BY e.company

可以得到如下結果

company employees
Google 0
Microsoft 2

不過有時候碰到沒有 table 可以做 JOIN 參照時,碰到 0 就不會顯示。
例如下表,status 欄位表示狀態,假設有 0 ~ 3 四種。

status
id company status
1 Google 0
2 Microsoft 0
3 Nokia 3

這時候用以下查詢

SELECT status, count(status) as num
FROM status_table
GROUP BY status

得到以下結果

status num
0 2
3 1

四種狀態只剩下有值的 0 和 3。通常碰到這種沒有 table 可以 join 的情況,我會去找一個剛好有對應的值的 table 來做 join,即使是實際上無關的 table 也無所謂,只要把空值補齊就算是達到目的了。

但是也有遇過真的沒有 table 可以 join 時,只好自己想辦法了.... Orz

SELECT fake.status,
       COUNT(status.status) AS num
FROM   (SELECT 0 AS status
        UNION
        SELECT 1 AS status
        UNION
        SELECT 2 AS status
        UNION
        SELECT 3 AS status) fake
       LEFT JOIN status
         ON status.status = fake.status
GROUP  BY fake.status

用列舉一個 fake table 的方式來 join,可以得到以下結果

status num
0 2
1 0
2 0
3 1

這個方法感覺有點呆,不過解決了困擾,先將就著用。

References:

Leave a Reply

Your email address will not be published. Required fields are marked *