关于sql语句中的count(*),count(1),count(具体字段)的介绍

本文详细解释了SQL中Count函数的不同用法,包括Count(*)、Count(数字)和Count(具体字段)的区别,以及它们在分组查询和外连接场景下的表现。探讨了这些用法在返回结果和性能上的差异,帮助读者更深入地理解如何根据需求选择合适的Count函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在sql语句中有一个聚合函数count();这个函数里面可以写*,可以写数字(不仅仅只可以写1),可以写具体字段,他们之间有什么区别呢?

查阅资料得知,count(*)与count(1)在各种数据库服务器底层中,效果是一样的。就是分组后,能查出数据,就会记录1条,依次往上加。所以就算只有一个字段有值,也会被+1。在外连接查询的时候,经常会碰到很多字段为空(null)的情况。所以这个时候就得根据需求来确定count函数里面写什么。

count(具体字段)这种写法的意思是,只有当具体字段的值不为空(null)的时候,才会+1。所以有时候分组查询了很多条数据,但是那个具体字段一直是null的话,那么count(具体字段)返回的还是0。

这种情况在外连接里经常碰到,这个时候,用count(*或数字)与count(具体字段)所返回的值是有可能不同的,不同就在于具体字段有没有空(null)。有几个空(null),那么count(具体字段)就会比count(*或数字)少几条数据。

总结:

count(*)与count(数字)这种写法更容易理解的含义是:返回该分组数据的总条数,有多少条,就会返回多少(字段全是null的是不存在的,所以有多少条数据,就会返回多少)。

count(具体字段)这种写法更容易理解的含义是:返回该具体字段在分组数据中不为空(null)的条数,有多少条不为空(null),就会返回多少。

性能方面:count(*)的性能等于count(数字)大于count(具体字段)

因为在sql的引擎中,分完组之后,count(*)与count(数字)其实结果就已经出来了,但是如果写了count(具体字段),引擎还会在遍历一遍分完组的数据,统计具体字段不为空(null)的条数,然后返回出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值