Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么计数(columnname)中不计算空值_Sql_Sql Server_Count_Null - Fatal编程技术网

Sql 为什么计数(columnname)中不计算空值

Sql 为什么计数(columnname)中不计算空值,sql,sql-server,count,null,Sql,Sql Server,Count,Null,所以前几天我在工作中遇到了一些事情,试图计算在运行导入后有多少空值 所以,我做到了: select COUNT(columnname) from table WHERE ColumnName is null 这还不算空值 然后我做了 select COUNT(*) from table WHERE ColumnName is null 这让我想起了伯爵 所以,让我感到困扰的是,为什么它不计算空值 我已经在谷歌搜索了一个好的搜索结果之后,看到了这个问题 , 虽然它告诉我COUNTcolum

所以前几天我在工作中遇到了一些事情,试图计算在运行导入后有多少空值

所以,我做到了:

select COUNT(columnname) from table 
WHERE ColumnName is null
这还不算空值

然后我做了

select COUNT(*) from table 
WHERE ColumnName is null
这让我想起了伯爵

所以,让我感到困扰的是,为什么它不计算空值

我已经在谷歌搜索了一个好的搜索结果之后,看到了这个问题 , 虽然它告诉我COUNTcolumnname不计算空值,但我想知道为什么不使用此方法计算空值

非常感谢,, James.

计数值,因为null不是一个值,所以它不会被计数

如果要计算所有空值,可以执行以下操作:

SELECT COUNT(ID) as NotNull, SUM(CASE WHEN ID IS NULL then 1 else 0 end) as NullCount

计数仅计算实际值…null不是一个值。因此:

当您希望包含可空值时,使用COUNT*


如果您只想计算非空值的数量,您可以使用COUNTcolumnname,如果您改为count1,您将不受此过滤器的影响,在条件中计算什么。

为什么COUNTcolumnname中不计算空值

将计算所有行

COUNT(columnname)
将统计所有行,columnname为空的行除外

原因是什么? 只是COUNT函数的工作方式是这样的:NULL值与其他值的处理方式不同,因为NULL可以被视为未知值的占位符,所以很常见的情况是,您只想计算具有实值的行,而跳过没有实值的行

对没有值的行进行计数不太常见,SQL也没有为其提供函数。但你可以很容易地计算出来:

SELECT
  COUNT(*) As rows,
  COUNT(columnname) AS non_null_count,
  COUNT(*) - COUNT(columnname) AS null_count
FROM
  yourtable

我不确定开销是否是一个问题,但我想到了,为什么要计算*?您可以简单地计算任何字段,其中肯定会有ID字段之类的数据,并添加一个where columnName为NULL的字段


从columnName为null的表中选择countID作为NullCount,正如@Jeffrey Wieder在他的回答中提到的,count counts实际值和null不是值,它会忽略它们。但是,如果要计算包含空值的列的所有行,可以执行以下操作-

Select count(column_name isnull) from table_name

这是在PostgreSQL中。如果有人能更清楚地解释为什么会这样,那就太棒了。我的理解是,在count中提到is null会使它甚至计算null值。。如果我错了,请纠正我

谢谢你的回答。这就是我的想法,因为它没有价值。谢谢你的回答!为什么?首先,因为它在SQL标准中是这样定义的。Jeffrey的回答中给出了需求背后的原因。这应该与所使用的特定DBMS一起标记,因为在这种情况下,行为可能不会有所不同,但这是一般性的建议,谢谢下划线。这应该是向上的。当您只想计算项目总数(包括空项)时,这对于简单的分组非常有用。
Select count(column_name isnull) from table_name