在SQL中,count(列)和count(*)之间有什么区别?

在SQL中,count(列)和count(*)之间有什么区别?

我有以下查询:

select column_name, count(column_name)from tablegroup by column_namehaving count(column_name) > 1;

会有什么区别,如果我更换了所有调用count(column_name)count(*)

为了澄清已接受的答案(也许是我的问题),替换count(column_name)count(*)将在结果中返回一个额外的行,其中包含a nullnull列中的值计数。


Smart猫小萌
浏览 2305回答 3
3回答

小唯快跑啊

count(*)计数NULL而count(column)不是[edit]添加了此代码,以便人们可以运行它create table #bla(id int,id2 int)insert #bla values(null,null)insert #bla values(1,null)insert #bla values(null,1)insert #bla values(1,null)insert #bla values(null,1)insert #bla values(1,null)insert #bla values(null,null)select count(*),count(id),count(id2)from #bla结果7 3 2

FFIVE

使用*和特定列之间的另一个细微差别是,在列情况下,您可以添加关键字DISTINCT,并将计数限制为不同的值:select column_a, count(distinct column_b)from tablegroup by column_ahaving count(distinct column_b) > 1;

交互式爱情

另一个也许是微妙的区别是,在某些数据库实现中,count(*)是通过查看有问题的表上的索引而不是实际的数据行来计算的。由于没有指定特定的列,因此无需为实际的行及其值而烦恼(如果您计算了特定的列,则会如此)。允许数据库使用索引数据可能比将其计为“实际”行要快得多。
打开App,查看更多内容
随时随地看视频慕课网APP