即使存在空值,SQL计数空值也为0

即使存在空值,SQL计数空值也为0,sql,azure-sql-database,sql-null,Sql,Azure Sql Database,Sql Null,在一个特定的例子中,我有一个数据库表,其中填充了1070个项目,在这个过程中的某个时刻,我向其中添加了一个名为“Current_Status”的列。因此,所有项都有一个初始为空的新字段 此表用作队列,对于处理的每一行,我将“当前_状态”字段更新为“已处理”或“未处理” 为了查看流程进展如何,我使用此查询计算状态为空的剩余项目: SELECT COUNT([Current_Status]) FROM Table_Name WHERE [Current_Status] IS NULL 问题是,在前

在一个特定的例子中,我有一个数据库表,其中填充了1070个项目,在这个过程中的某个时刻,我向其中添加了一个名为“Current_Status”的列。因此,所有项都有一个初始为空的新字段

此表用作队列,对于处理的每一行,我将“当前_状态”字段更新为“已处理”或“未处理”

为了查看流程进展如何,我使用此查询计算状态为空的剩余项目:

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检查了这种情况。

原因是您为count提供了一个为null的列值。而是使用count*:

样本数据:

current_status
--------------
Processed
Null
Not Processed
Null
以及两个查询之间的差异:

countu当前状态

计数*


原因是您为count提供了一个为null的列值。而是使用count*:

样本数据:

current_status
--------------
Processed
Null
Not Processed
Null
以及两个查询之间的差异:

countu当前状态

计数*

您可以说,获取当前_状态为null的所有行,并计算这些当前_状态中有多少不为null。当然是零。计数表达式的非空出现次数

而是要计算行数:

SELECT COUNT(*) FROM table_name WHERE current_status IS NULL;
或剩余数量:

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

您可以说,获取当前_状态为null的所有行,并计算这些当前_状态中有多少不为null。当然是零。计数表达式的非空出现次数

而是要计算行数:

SELECT COUNT(*) FROM table_name WHERE current_status IS NULL;
或剩余数量:

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

但当列中的值与null不同时,问题就出现了,几乎所有值都是null。使用“*”可以解决这个问题,但是当列中的值与null不同时,问题就出现了,几乎所有的值都是null。那么使用“*”可以解决这个问题吗?
SELECT COUNT(*) - COUNT(current_status) FROM table_name;