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