count(*)vs count(列名)-哪个更正确?

count(*)与count(column-name)这两个示例相比,这样做是否有所不同?


我倾向于总是写,count(*)因为如果可行,它似乎更适合我的想法,因为它是一个聚合函数。


但是我不确定这在技术上是否最好,因为我倾向于看到示例代码编写时*经常没有。


计数(*):


select customerid, count(*), sum(price) 

from items_ordered

group by customerid

having count(*) > 1;

vs. count(列名):


SELECT customerid, count(customerid), sum(price)

FROM items_ordered

GROUP BY customerid

HAVING count(customerid) > 1;


浮云间
浏览 636回答 3
3回答

茅侃侃

COUNT(*) 计算所有行COUNT(column) 仅计算非NULLCOUNT(1)等同于COUNT(*)因为1是非空表达式您在使用COUNT(*)或COUNT(column)应根据所需的输出只。

冉冉说

这适用于MySQL。我不确定其他人。区别在于:COUNT(*) 将计算记录数。COUNT(column_name) 将计算column_name不为null的记录数。因此,这COUNT(*)是您应该使用的。如果您使用的是MyISAM,并且没有WHERE子句,那么优化器甚至不必查看表,因为已经缓存了行数。

湖上湖

当它是一个标识符(并保证为非标识符NULL)时,这可能并不重要。但是,有是之间的差异COUNT(*),并COUNT(column)在一般情况下,这COUNT(column)将返回非计数NULL列中的值。还有一种COUNT(DISTINCT column)变体,可返回唯一的非NULL值的数量。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server