MySQL统计单条记录列非空值 筛选不符合SPNR要求的记录
MySQL 筛选不符合有效SP数量记录的方案
首先注意你提供的表结构存在笔误:表头重复定义了两次SP2,最后一个SP字段实际应为SP3,以下方案按SP1、SP2、SP3三个SP字段进行处理。
你要的效果可以直接通过单行条件判断相加实现,MySQL中布尔判断的结果会默认转为1(符合条件)/0(不符合条件),相加后的值就是当前记录的有效SP总数,和SPNR比较即可筛选出不符合要求的记录:
SELECT * FROM 你的表名 WHERE (SP1 = 'x') + (SP2 = 'x') + (SP3 = 'x') < SPNR;
逻辑说明
- 每个
(SPx = 'x')判断如果SP字段值为x则返回1,否则返回0,三个值相加的结果就是这条记录实际的有效SP数量 - 筛选条件
实际有效数 < 要求数量SPNR刚好匹配你的需求,执行后会返回ID为02、03、04的三条不符合要求的记录。
空值兼容调整
如果你的SP字段可能存储NULL而非空字符串,可改用IF函数明确判断:
SELECT * FROM 你的表名 WHERE IF(SP1 = 'x',1,0) + IF(SP2 = 'x',1,0) + IF(SP3 = 'x',1,0) < SPNR;
内容的提问来源于stack exchange,提问作者Ismael Roque
相关产品推荐
相关产品推荐

