如何统计仅含NULL/空值Status字段的唯一用户ID
解决方案
方法一:NOT EXISTS子查询
先定位所有存在非NULL/非空Status记录的用户,再排除这些用户,统计剩余唯一用户数:
SELECT COUNT(DISTINCT user_id) AS user_count FROM table a WHERE NOT EXISTS ( SELECT 1 FROM table b WHERE b.user_id = a.user_id AND b.status IS NOT NULL AND b.status != '' )
方法二:GROUP BY + HAVING聚合判断
按用户分组,校验该用户的所有Status要么是NULL要么是空串:
SELECT COUNT(user_id) AS user_count FROM ( SELECT user_id FROM table GROUP BY user_id HAVING MAX(CASE WHEN status IS NOT NULL AND status != '' THEN 1 ELSE 0 END) = 0 ) AS valid_users
关键说明
- 两种方法都能精准筛选出所有记录Status全为NULL/空值的用户,自动排除像示例中1、2这类存在有效Status的用户。
- 若业务中空值仅指NULL(无空字符串场景),可删除
AND status != ''条件适配。 - 性能层面:如果表上有
user_id + status的复合索引,NOT EXISTS通常更快;GROUP BY方式在大表场景下也能稳定运行,可根据实际索引情况选择。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

