在Grafana中用PostgreSQL查询统计NIF字段空值与非空值
问题分析与解决方案
原查询的核心问题在于分组依据错误:你按原始nif字段分组,导致每个不同的非空NIF值都会被单独统计,而非将所有非空NIF归为一类。另外,原查询未处理nif为NULL的情况(字段允许为空,除了空字符串'',还有可能是NULL)。
修正后的查询语句
SELECT 0 as time, CASE WHEN nif IS NULL OR nif = '' THEN 'Sin identificar' ELSE 'Identificados' END as classification, COUNT(*) as total_count FROM conversations WHERE $__timeFilter("fecha") GROUP BY time, classification ORDER BY total_count DESC
关键修正点
- 分组逻辑调整:将
GROUP BY的字段改为CASE语句生成的classification,这样所有空值(NULL或空字符串)会被归为一组,所有非空NIF会被归为另一组,实现整体计数。 - 完善空值判断:补充
nif IS NULL的判断,覆盖字段允许为空的两种情况(NULL和空字符串)。 - 计数方式优化:用
COUNT(*)统计每组的总记录数,避免COUNT(nif)忽略NULL值的问题(虽然这里分组已经处理了NULL,但COUNT(*)更直观)。
效果说明
执行修正后的查询后,会返回两条记录:
Sin identificar:所有NIF为NULL或空字符串的对话数量Identificados:所有NIF非空且不为空字符串的对话数量
这样就能在Grafana中正确展示两类数据的统计结果。
内容的提问来源于stack exchange,提问作者Iago F
相关产品推荐
相关产品推荐

