如何在MySQL中准确统计表指定列的非空有效行数
问题根源
count(Id)返回4而非预期的2,是因为Id列里两行看起来为空的记录,存的根本不是NULL,而是空字符串、全空格这类空白内容。SQL里count(指定列)只会排除值为NULL的行,不会自动识别这类无实际意义的空白值,自然统计结果不对。
正确写法
统计时同时过滤掉NULL和空白内容就能得到准确结果,主流数据库通用的写法如下:
SELECT COUNT(Id) FROM 你的表名 WHERE Id IS NOT NULL AND TRIM(Id) <> ''
TRIM(Id)的作用是去掉Id值首尾所有空格、制表符这类不可见空白字符,判断处理后的值不是空串,就能把William、David两行无效Id的记录全部过滤掉,最终返回你要的结果2。
特殊场景适配
如果Id是数值类型,空内容被数据库自动转成0这类默认值存储,只要在WHERE条件里加上有效值判断规则就行,比如业务要求Id必须是正整数,可以这么写:
SELECT COUNT(Id) FROM 你的表名 WHERE Id IS NOT NULL AND Id > 0
内容的提问来源于stack exchange,提问作者Sagar
相关产品推荐
相关产品推荐

