使用WHERE子句统计各省INACTIVE客户数总是查询无结果如何解决
原问题(翻译)
需要统计每个省份的非活跃(INACTIVE)客户数量,但是每次在WHERE子句设置过滤条件后,查询都会返回“无查询结果”,原查询语句如下:
SELECT a.province, count(t.customer_id) as total_customer_on_each_province FROM total_customer t LEFT JOIN last_address a on a.customer_id = t.customer_id WHERE t.status = 'INACTIVE' GROUP BY province
排查与解决方法
- 第一步先验证
total_customer表是否存在状态为INACTIVE的客户,直接执行以下查询:
SELECT COUNT(*) AS inactive_count FROM total_customer WHERE status = 'INACTIVE';
如果返回结果为0,说明要么当前确实没有非活跃客户,要么status字段的实际值和你写的过滤条件不匹配,常见不匹配场景包括:
- 值的大小写不一致:例如实际存储的是
inactive、Inactive而非全大写的INACTIVE - 值携带多余空格:例如存储的是
INACTIVE末尾带有空白字符 - 字段类型不匹配:例如
status是数值类型,用0代表非活跃,你用字符串'INACTIVE'过滤自然无法匹配 - 字段名拼写错误:确认状态字段的实际名称是否为
status,有没有可能是cust_status之类的其他命名
- 如果上述查询返回结果大于0,说明过滤条件本身可以匹配到数据,再检查关联逻辑:你的原SQL用
total_customer做主表左连地址表,只要主表有符合条件的行,就算没有匹配的地址数据,也会返回province为NULL的统计行,不会完全无结果,因此基本可以定位问题出在status的过滤条件匹配上。
如果你需要同时统计「没有非活跃客户的省份,显示数量为0」,可以调整查询逻辑,把地址表设为左连主表,状态过滤写在关联条件中,参考语句:
SELECT a.province, COUNT(t.customer_id) as total_inactive_customer FROM last_address a LEFT JOIN total_customer t ON a.customer_id = t.customer_id AND t.status = 'INACTIVE' GROUP BY a.province
内容的提问来源于stack exchange,提问作者Kalisa Fitri Ramadhanti
相关产品推荐
相关产品推荐

