2012-08-06 12 views
3

我一直在尋找所有谷歌 - 我可能只是愚蠢理解的答案。MYSQL單桌數()表示,即使= NULL

我在mysql中的表 - 的問題。

+-------------+---------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+---------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | 
| status  | varchar(255) | YES | 
+-------------+---------------+------+ 

每個問題都有一個狀態。

我想獲得一個選擇來計算所有的問題和狀況列出來:

SELECT狀態,COUNT(*)作爲 '總' FROM問題WHERE(DATE(logged_at)> =)GROUP BY狀態

有5個不同的狀態 -

報告 不固定 固定 已上報 簡稱

麻煩的是 - 我如果count> 0,select僅顯示Status。如果count = null,我如何顯示所有狀態?

我已經試過IFNULL,但沒有運氣。我也看到有人談論左連接解決方​​案,但那是多表問題。

很多謝謝!

+0

這是一個多表問題。您需要一個列出狀態的表格,以及一個包含數據的表格。 – MatBailie 2012-08-06 14:39:55

回答

1

解決的辦法是你已經跨入了什麼:從具有所有這些5個狀態表中的LEFT JOIN。如果你沒有這樣的表,你可以把它創建爲permament或在飛行(你需要它每次):存儲列表

SELECT 
    st.status 
    , COUNT(issues.status) AS total 
FROM 
    (SELECT 'Active' AS status UNION ALL 
     SELECT 'Inactive' UNION ALL 
     ... 
     SELECT 'Super' 
    ) AS st 
    LEFT JOIN 
    issues 
     ON issues.status = st.status 
     AND issues.logged_at >= ?  -- no reason to use DATE() function here 
GROUP BY st.status ; 
1

您將需要一個額外的表(例如所謂的狀態)的所有狀態,即與問題表中相同類型的一個字段,並確保將索引放在字段中。

那麼下面的SQL應該做的伎倆:

select statuses.status,count(issues.id) from issues right join statuses on issues.status=statuses.status group by statuses.status 

附加表的好處是,你決定不再有另一個身份,所有你需要做的就是把它添加到表中,而不必更改任何現有的SQL語句。

相關問題