SQL查询问题:统计指定日期区间内fid的有效行数
解决方法:统计指定日期区间内存在fid的行数
你的SQL语句目前存在两个关键问题,才导致返回了日期区间内的总行数,而非你需要的带有效fid的行数:
- 语法逻辑错误:你写的
not in ('')没有关联到fid字段,位置也不对,数据库无法识别你要筛选的是fid非空的行,最终只执行了日期范围的筛选条件。 - 空值判断不准确:如果
fid不存在的行是指fid为NULL,那么not in ('')无法正确排除这类行——因为NULL和任何值比较的结果都是未知,不会被筛选掉。
正确的SQL查询语句
要同时满足「日期在指定区间内」和「fid存在(不为NULL)」两个条件,正确写法如下:
SELECT COUNT(*) AS fid_count FROM users WHERE created_on BETWEEN '2017-01-06 00:00:00' AND '2017-01-06 23:59:59.997' AND fid IS NOT NULL;
补充情况处理
如果你的fid字段除了NULL之外,还可能存在空字符串''的无效值,需要同时排除这两种情况,可以修改为:
SELECT COUNT(*) AS fid_count FROM users WHERE created_on BETWEEN '2017-01-06 00:00:00' AND '2017-01-06 23:59:59.997' AND fid IS NOT NULL AND fid <> '';
这样就能准确统计出指定日期区间内,存在有效fid值的行数了。
内容的提问来源于stack exchange,提问作者Coderfe
相关产品推荐
相关产品推荐

