繁体   English   中英

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

[英]SQL Count NULL values is 0 even when there are NULL values

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

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

为了查看流程的进行情况,我使用以下查询对剩余的状态仍然为NULL的项目进行了计数:

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

问题是,在前1000个项目之后,即使我检查并使用SELECT * FROM Table_Name查询也显示出仍有一些状态为NULL的行,但该查询执行的结果为0

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

我使用Azure Data Studio 1.4.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

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

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

您想改为计算行数:

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

或计数仍然存在:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM