SQL COUNT函数是否自动排除NULL值?如何统计birthdate列NULL值?
解答你的COUNT函数疑问
没错,你猜的完全正确!COUNT(birthdate)确实会自动排除birthdate列中的NULL值,这是SQL里COUNT函数的核心特性之一:
- 当你使用
COUNT(*)时,它会统计表中所有的记录行数,不管任何列是否为NULL,所以你得到了8398这个总记录数。 - 而当你指定具体列名(比如
COUNT(birthdate))时,它只会统计该列不为NULL的记录数量,这就是为什么结果只有6152条。
统计birthdate列中NULL值的数量,有几种常用方法:
用总记录数减去非NULL记录数:
这是最直观的方式,直接利用你已经得到的两个数值计算:SELECT COUNT(*) - COUNT(birthdate) AS null_birthdate_count FROM people;使用CASE表达式配合SUM:
这种方法逻辑更清晰,明确判断NULL并计数:SELECT SUM(CASE WHEN birthdate IS NULL THEN 1 ELSE 0 END) AS null_birthdate_count FROM people;使用COUNT配合CASE:
因为COUNT会忽略NULL,所以我们可以让CASE在birthdate为NULL时返回1,否则返回NULL,这样COUNT就只会统计那些返回1的行:SELECT COUNT(CASE WHEN birthdate IS NULL THEN 1 END) AS null_birthdate_count FROM people;
这几种方法都能得到你想要的NULL值数量,结果应该是8398 - 6152 = 2246条。
内容的提问来源于stack exchange,提问作者user1554264
相关产品推荐
相关产品推荐

