2010-02-25 78 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