Sql 什么时候在计数中使用列名而不是*?
我理解您为什么使用Sql 什么时候在计数中使用列名而不是*?,sql,count,Sql,Count,我理解您为什么使用COUNT(*)和COUNT(独立列),但在哪些情况下,您只需使用COUNT(列)。COUNT(col)是否返回与COUNT(*)相同的结果 及 两者都会导致 来自客户的订单7 四, 在这个W3学校。当你使用计数(Column)时,它不会计数空值 与计数(*)相反,计数(*)将对每一行单独计数,无论是否为空 让我们以这种情况为例: ID | NAME 1 John 2 NULL 3 Jonathan SELECT COUNT(*) F
COUNT(*)
和COUNT(独立列)
,但在哪些情况下,您只需使用COUNT(列)
。COUNT(col)
是否返回与COUNT(*)相同的结果
及
两者都会导致
来自客户的订单7
四,
在这个W3学校。当你使用计数(Column)时,它不会计数空值
与计数(*)相反,计数(*)将对每一行单独计数,无论是否为空
让我们以这种情况为例:
ID | NAME
1 John
2 NULL
3 Jonathan
SELECT COUNT(*) FROM Table -- return 3
SELECT COUNT(NAME) FROM Table -- return 2
试试这个:
DECLARE @tbl TABLE(ID INT IDENTITY,SomeValue INT);
INSERT INTO @tbl VALUES(1),(2),(NULL);
SELECT *
FROM @tbl
SELECT COUNT(*) AS COUNT_Asterisk
,COUNT(SomeValue) AS COUNT_SomeValue
FROM @tbl
当对非
NULL
的列进行计数时,以下结果相同:
COUNT(*)
计数(1)
计数(列)
NULL
。在聚合查询中,此开销通常非常小
第一种方法是使用
*
,这是计算行数的原始方法。第二个很好,尽管我更喜欢第一个。为什么?因为COUNT(1)
=COUNT(2)
,我觉得这很尴尬。在列值可以为空的情况下,结果会有所不同。两者在性能方面也各不相同。有关更多详细信息,请参阅本文不要将w3用作学习工具。如果col
为NULL
,您会注意到不同之处。未计算的,COUNT(*)
将计算每条记录。IIRC COUNT(col)不计算空值
ID | NAME
1 John
2 NULL
3 Jonathan
SELECT COUNT(*) FROM Table -- return 3
SELECT COUNT(NAME) FROM Table -- return 2
DECLARE @tbl TABLE(ID INT IDENTITY,SomeValue INT);
INSERT INTO @tbl VALUES(1),(2),(NULL);
SELECT *
FROM @tbl
SELECT COUNT(*) AS COUNT_Asterisk
,COUNT(SomeValue) AS COUNT_SomeValue
FROM @tbl