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