在MySQL中计算和分组非空值

时间:2010-02-25 15:06:09

标签: mysql count group-by

我需要计算按特定ID分组的非空(我指的是包含至少1个字符的字符串)行。例如。我的数据可能如下所示:

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,所以这也不好。

我猜我需要某种子查询,但我很难将它组合在一起。

1 个答案:

答案 0 :(得分:17)

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

这不会计算不包含至少一个非空白字符的记录(包括空格字符串,空字符串和NULL)。

如果非空的全空白字符串有效,请使用:

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