2010-02-25 77 views
8

我需要計算由特定ID分組的非空(由此我指的是一個包含至少1個字符的字符串)行。例如。我的數據可能是這樣的:MySQL中的計數和組非空值

form_id mapping 
1   'value_1' 
1   '' 
1   'value_2' 
2   '' 
2   NULL 
3   'value_3' 

,我想指望每種形式的非空值,所以我希望結果是這樣的:

form_id mapping_count 
1   2 
2   0 
3   1 

如果空值分別爲所有NULL,我想我可以使用

SELECT form_id, count(mapping) FROM table GROUP BY form_id 

...但這將包括計數,我不想要的零長度的字符串。

我可以使用where子句僅返回映射列中存在值的行,但我想返回沒有映射的表單ID,因此也不行。

我猜我需要某種子查詢,但我很難把它放在一起。

回答

13
SELECT form_id, COUNT(NULLIF(TRIM(mapping), '')) 
FROM mytable 
GROUP BY 
     form_id 

這將不計算不包含至少一個非空白字符(包括空白字符串,空字符串和NULL S)的記錄。

如果一個非空的所有空白字符串是有效的,使用此:

SELECT form_id, COUNT(NULLIF(mapping, '')) 
FROM mytable 
GROUP BY 
     form_id 
+0

大,感謝 - 我還沒有跨越NULLIF功能之前。正是我需要的。 :) – Russ 2010-02-25 15:20:37