1

在特定情况下,我有一个填充了 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 检查了这种情况。

4

2 回答 2

5

这样做的原因是因为您为 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
于 2019-03-15T09:13:32.970 回答
4

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;
于 2019-03-15T09:19:46.603 回答