SQL使用COUNT IF统计不包含指定值记录失败,求可行实现方案
问题原因
你编写的SQL无法得到预期结果的核心原因是NOT IN运算符不支持%模糊匹配逻辑:IN/NOT IN仅支持精确值匹配,你写的'%A%'这类带通配符的内容会被当成普通字符串做精确比对,无法生效。
可行实现方案
方案1:多NOT LIKE组合(全数据库兼容)
这是兼容性最高的写法,适配所有主流关系型数据库:
SELECT COUNT(1) AS `123` FROM 你的表名 WHERE ABC NOT LIKE '%A%' AND ABC NOT LIKE '%B%' AND ABC NOT LIKE '%C%' AND ABC NOT LIKE '%D%' AND ABC NOT LIKE '%E%' AND ABC NOT LIKE '%F%' AND ABC NOT LIKE '%G%' AND ABC NOT LIKE '%H%';
方案2:正则匹配(写法更简洁,适配支持正则的数据库)
如果使用的是MySQL、PostgreSQL这类支持正则匹配的数据库,可以用正则简化写法:
-- MySQL 实现 SELECT COUNT(1) AS `123` FROM 你的表名 WHERE ABC NOT REGEXP '[A-H]';
-- PostgreSQL 实现 SELECT COUNT(1) AS `123` FROM 你的表名 WHERE ABC !~ '[A-H]';
注意事项
如果ABC字段存在NULL值,NOT LIKE、正则匹配都会将NULL判定为不符合条件,如果你需要把NULL值也计入统计,需要在条件中补充OR ABC IS NULL。
内容的提问来源于stack exchange,提问作者samcarbo
相关产品推荐
相关产品推荐

