2010-08-02 54 views
5

如何在進行交叉表查詢時計算空值?在MYSQL中計數空值

我有三個colums [ID,姓名,答案]

一個表,我有如下記錄:

ID NAME ANS 
1 ABC 1 
1 ABC 0 
1 ABC NULL 
2 XYZ 1 
2 XYZ NULL 
2 XYZ NULL 
2 XYZ 1 
2 XYZ 0 
1 ABC 0 

現在我想獲得我的結果:

ID Name NULLCOUNT  TRUE COUNT FALSE COUNT 
1 ABC 1    1   2 
2 XYZ 2    2   1 

我正在使用以下SQL語句:

select ID, NAME, 
    sum(case ANS when null then 1 else 0 end) as NULLCOUNT, 
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT, 
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT 
from 
    TBL1 
Group By ID, Name 

獲得我的結果:

ID Name NULLCOUNT  TRUE COUNT FALSE COUNT 
1 ABC 0    1   2 
2 XYZ 0    2   1 

NULL Count正在出錯。爲什麼以及如何解決這個問題?

回答

7

我相信不是這樣的:

sum(case ANS when null then 1 else 0 end) as NULLCOUNT 

你應該使用這樣的:

sum(case when ANS is null then 1 else 0 end) as NULLCOUNT 
+0

thnx它的工作,但想問爲什麼它不同於truecount和falsecount。對於truecount和falsecount,它們不應該一樣嗎?哪一個是正確的休息別人 – KoolKabin 2010-08-02 13:08:37

+0

null就像是undefined。未定義!=未定義。 – foret 2010-08-02 13:09:45

+0

@KoolKabin:因爲您在'case'構造中隱式比較ANS和NULL。但是,NULL不等於任何東西,甚至不等於:NULL!= NULL(計算結果爲true)。您需要使用特殊的「IS NULL」結構:「NULL IS NULL」(計算結果爲true)。狡猾,是的。有用的,也是。 – Piskvor 2010-08-02 13:14:26

1

空 - >爲空?

+0

我如何在我的解決方案中使用它。 PLZ解釋 – KoolKabin 2010-08-02 13:10:11

+0

這是dcp答案的重複。好像我們幾乎同時寫了它。 – foret 2010-08-02 13:15:19

1

NULL甚至不能與自身比較,您可以使用「CASE WHEN ANS爲NULL」(您還缺少GROUP BY)。或嘗試:

select ID, NAME, 
    sum(if(ans IS NULL, 1, 0)) as NULLCOUNT, 
    sum(case ANS when 1 then 1 else 0 end) as TRUECOUNT, 
    sum(case ANS when 0 then 1 else 0 end) as FALSECOUNT 
from 
    TBL1 
group by ID,NAME 
+0

對不起,有問題,但實際上我在查詢中使用它。我也會在我的問題中編輯它.. thnx的建議 – KoolKabin 2010-08-02 13:20:29