在MySQL中计算和分组非空值

Rus*_*uss 10 mysql group-by count

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

form_id   mapping
1         'value_1'
1         ''
1         'value_2'
2         ''
2         NULL
3         'value_3'
Run Code Online (Sandbox Code Playgroud)

我想计算每个表单的非空值,所以我希望结果看起来像这样:

form_id   mapping_count
1         2
2         0
3         1
Run Code Online (Sandbox Code Playgroud)

如果空值都是NULL,我想我可以使用

SELECT form_id, count(mapping) FROM table GROUP BY form_id
Run Code Online (Sandbox Code Playgroud)

...但是这将包括计数中的零长度字符串,这是我不想要的.

我可以使用where子句只返回映射列中存在值的行,但我想返回没有映射的表单ID,所以这也不好.

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

Qua*_*noi 19

SELECT  form_id, COUNT(NULLIF(TRIM(mapping), ''))
FROM    mytable
GROUP BY
        form_id
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT  form_id, COUNT(NULLIF(mapping, ''))
FROM    mytable
GROUP BY
        form_id
Run Code Online (Sandbox Code Playgroud)