【问题标题】:SQL Count NULL values is 0 even when there are NULL values即使存在 NULL 值,SQL Count NULL 值也为 0
【发布时间】:2019-03-15 09:10:49
【问题描述】:

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

任何想法可能导致这种情况?

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

【问题讨论】:

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


    【解决方案1】:

    这样做的原因是因为您为计数提供了一个列值为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
    

    【讨论】:

    • 但是当列中的值与 null 不同(几乎所有值)时,问题就出现了。那么使用 '*' 会解决问题吗?
    【解决方案2】:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      相关资源
      最近更新 更多