即使存在NULL值,SQL Count NULL值也为0

时间:2019-03-15 09:10:49

标签: sql azure-sql-database sql-null

在特定情况下,我有一个填充有1070个项目的数据库表,并且在过程中的某个时刻,我在其中添加了一个名为“ Current_Status”的列。结果,所有项目都有一个新的字段,该字段最初为 NULL

此表用作队列,对于已处理的每一行,我将“ Current_Status”字段更新为“已处理”或“未处理”。

为了查看进度,我正在使用以下查询对剩余的仍为状态 NULL 的项目进行计数:

SELECT COUNT([Current_Status]) FROM Table_Name WHERE [Current_Status] IS NULL

问题是,在前1000个项目之后,即使我检查并使用0查询表明仍有一些状态为SELECT * FROM Table_Name。 > NULL 。

任何想法可能是什么原因造成的?

我使用Azure Data Studio 1.4.5检查了这种情况。

2 个答案:

答案 0 :(得分:4)

之所以这样做,是因为您为count提供的列值为null。而是使用count(*)

SELECT COUNT(*) FROM Table_Name WHERE [Current_Status] IS NULL

样本数据:

current_status
--------------
Processed
Null
Not Processed
Null

以及两个查询之间的区别:

计数(当前状态)

SELECT count(current_status) FROM table_name WHERE current_status IS NULL 

0

计数(*)

SELECT count(*) FROM table_name WHERE current_status IS NULL 

2

答案 1 :(得分:3)

使用

SELECT COUNT([Current_Status]) FROM Table_Name WHERE [Current_Status] IS NULL

您说“取current_status为空的所有行,并计算其中current_status不为空的行数”。这当然是零。 COUNT(<expression>)计算表达式的非空出现次数。

您想计算行数:

SELECT COUNT(*) FROM table_name WHERE current_status IS NULL;

或者计数仍然存在:

SELECT COUNT(*) - COUNT(current_status) FROM table_name;