您何时在计数中使用列名而不是*?

时间:2016-03-09 11:42:21

标签: sql count

我理解您使用COUNT(*)COUNT(DISTINCT col)的原因,但在哪种情况下您只使用COUNT(col)COUNT(col)不会返回与COUNT(*)相同的结果吗?

SELECT COUNT(CustomerID) AS OrdersFromCustomerID7 FROM Orders
WHERE CustomerID=7;

SELECT COUNT(*) AS OrdersFromCustomerID7 FROM Orders
WHERE CustomerID=7;

都会导致

OrdersFromCustomerID7 4

在这个W3学校example

4 个答案:

答案 0 :(得分:2)

当您使用 COUNT(Colomn)时,它不会计算 nulls

COUNT(*)相反,无论是否为null, 每行

让我们来看看这个案例:

ID   |  NAME
 1      John
 2      NULL
 3      Jonathan

SELECT COUNT(*) FROM Table -- return 3

SELECT COUNT(NAME) FROM Table -- return 2

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

当您计算不是<b><span>UNTRUSTED DATA</span></b> <script>alert("hai middlename")</script> 的列时,以下结果会产生相同的结果:

  • NULL
  • COUNT(*)
  • COUNT(1)

性能方面通常存在很小的潜在差异。前两个计算。第三个实际上需要读取列值(至少在大多数数据库中)。在某些情况下,这可能需要读取其他数据以确定该值是否确实不是COUNT(column)。在聚合查询中,此开销通常非常小。

第一个,使用NULL,是计算行的原始方式。第二个很好,虽然我更喜欢第一个。为什么?因为* = COUNT(1),我觉得很尴尬。

答案 3 :(得分:1)

如果列值可以为NULL,则结果会有所不同。在性能方面,两者都有所不同。您可以参阅此文章以获取更多详细信息count-vs-countcol