在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 null和null列中的值计数。
3 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
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
TA贡献1797条经验 获得超6个赞
使用*和特定列之间的另一个细微差别是,在列情况下,您可以添加关键字DISTINCT,并将计数限制为不同的值:
select column_a, count(distinct column_b)from tablegroup by column_ahaving count(distinct column_b) > 1;
交互式爱情
TA贡献1712条经验 获得超3个赞
另一个也许是微妙的区别是,在某些数据库实现中,count(*)是通过查看有问题的表上的索引而不是实际的数据行来计算的。由于没有指定特定的列,因此无需为实际的行及其值而烦恼(如果您计算了特定的列,则会如此)。允许数据库使用索引数据可能比将其计为“实际”行要快得多。
添加回答
举报
0/150
提交
取消