SQL查询:筛选仅含Overdue与Referral值的用户记录
针对用户筛选需求的SQL解决方案
嘿,我来帮你搞定这个查询需求!你需要找出那些Details字段仅包含Overdue和Referral的用户,同时排除掉任何有Lost或Processing记录的用户对吧?下面给你两种实用的实现方式:
方法一:GROUP BY + HAVING 统计排除法
这种方法通过分组后统计违规记录的数量来筛选:
SELECT Users FROM your_table_name -- 记得替换成你的实际表名 GROUP BY Users HAVING SUM(CASE WHEN Details NOT IN ('Overdue', 'Referral') THEN 1 ELSE 0 END) = 0;
逻辑解释:
- 按
Users分组后,用CASE语句标记每个用户的记录中是否包含不允许的Details值(Lost/Processing) - 统计这些违规记录的总数,等于0就说明该用户的所有记录都只有Overdue或Referral,符合要求
方法二:NOT EXISTS 反向排除法
这种写法更直观,直接排除掉存在违规记录的用户:
SELECT DISTINCT Users FROM your_table_name t1 -- 替换成实际表名 WHERE NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.Users = t1.Users AND t2.Details IN ('Lost', 'Processing') );
逻辑解释:
- 外层查询遍历每个用户,内层查询检查该用户是否存在任何Lost或Processing的记录
- 如果不存在(
NOT EXISTS),就保留这个用户,正好符合你的筛选条件
验证示例数据
把你提供的示例数据代入这两个查询,都会得到你期望的结果:
1560
1356
1289
内容的提问来源于stack exchange,提问作者tabs
相关产品推荐
相关产品推荐

