Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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 什么时候在计数中使用列名而不是*?_Sql_Count - Fatal编程技术网

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