我需要计算按特定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,所以这也不好。
我猜我需要某种子查询,但我很难将它组合在一起。
答案 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