技术求助:统计未持有特定资质的人员数量
解决统计无特定资质人员数量的问题
嘿,我完全懂你现在的困扰!你想要统计的是完全没有某一特定资质对应记录的人员总数,但用NOT关键字过滤时,得到的却是持有其他资质的人员记录——这确实不对,因为那些人只是没这个资质,但本身有其他资质的行存在,所以会被错误统计进去。
正确的解决方案有两种常用方式:
方法一:使用NOT EXISTS子查询(推荐,性能通常更好)
这种方式直接检查每个人员是否不存在目标资质的记录,逻辑清晰且高效:
SELECT COUNT(p.PersonnelID) AS Number FROM dbo.Personnel p -- 替换成你的人员主表名 WHERE NOT EXISTS ( SELECT 1 -- 替换成你的人员-资质关联表名 FROM dbo.PersonnelQualifications pq WHERE pq.PersonnelID = p.PersonnelID -- 替换成你要排除的目标资质ID AND pq.QualificationID = 'TARGET_QUALIFICATION_ID' )
方法二:使用左连接+NULL判断
通过左连接保留所有人员,再筛选出未匹配到目标资质的记录:
SELECT COUNT(DISTINCT p.PersonnelID) AS Number FROM dbo.Personnel p -- 人员主表 LEFT JOIN dbo.PersonnelQualifications pq -- 人员-资质关联表 ON p.PersonnelID = pq.PersonnelID AND pq.QualificationID = 'TARGET_QUALIFICATION_ID' -- 目标资质ID WHERE pq.PersonnelID IS NULL
注意:这里用
DISTINCT是因为如果一个人持有多个其他资质,左连接后会生成多行相同人员的记录,去重后才能得到准确的人数。
为什么你的原方法会出错?
如果你的原查询是类似SELECT ... FROM 资质表 WHERE QualificationID != '目标ID',那它只会排除掉目标资质的行,但持有其他资质的人员仍然会出现在结果里——这和你要找的“完全没有该资质记录的人员”完全是两回事。
内容的提问来源于stack exchange,提问作者PaulB86
相关产品推荐
相关产品推荐

