为什么不在COUNT(列名)中计算空值

Jam*_*ton 7 sql sql-server null count

所以我前几天遇到了一些事情,试图在运行导入后计算多少空值.

所以我做了:

select COUNT(columnname) from table 
WHERE ColumnName is null
Run Code Online (Sandbox Code Playgroud)

哪个没有计算空值...

然后我做了,

select COUNT(*) from table 
WHERE ColumnName is null
Run Code Online (Sandbox Code Playgroud)

这给了我数数.

所以,让我烦恼的是为什么这不计算空值.

我已经看过这个问题(以及围绕谷歌的一个很好的搜索......): 在SQL中,count(列)和count(*)之间有什么区别?虽然它告诉我COUNT(columnname)不计算空值,但我想知道为什么使用这种方法不计算空值?

非常感谢,詹姆斯.

Jef*_*der 9

COUNT 计数值,因为null不是一个不计算的值.

如果要计算所有空值,可以执行以下操作:

SELECT COUNT(ID) as NotNull, SUM(CASE WHEN ID IS NULL then 1 else 0 end) as NullCount
Run Code Online (Sandbox Code Playgroud)


fth*_*lla 5

为什么不计入空值COUNT(columnname)

COUNT(*)
Run Code Online (Sandbox Code Playgroud)

将计算所有行

COUNT(columnname)
Run Code Online (Sandbox Code Playgroud)

将计算所有行,但列名为IS NULL的行除外.

那是什么原因?只是该COUNT()函数被设计为以这种方式工作:NULL值与其他值的处理方式不同,因为NULL可以被视为"未知"值的占位符,因此您只想计算具有实际值和跳过没有的行.

计算没有值的行不常见,SQL不为它提供函数.但你可以很容易地计算出来:

SELECT
  COUNT(*) As rows,
  COUNT(columnname) AS non_null_count,
  COUNT(*) - COUNT(columnname) AS null_count
FROM
  yourtable
Run Code Online (Sandbox Code Playgroud)