我理解您使用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。
答案 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