count(1)、count(*)与count(列名)的执行区别

原文链接

COUNT() 函数返回匹配指定条件的行数。

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):不包含值为NULL的记录

COUNT(*) 函数返回表中的记录数

COUNT(DISTINCT column_name) 函数返回指定列不同值的数目

SUM()函数,是针对表tab中,任意符合可加减的字段,进行加和。

select COUNT(CARRIER_NAME),sum(STEP_STATUS) from ACC_eLogistics..CARRIER_INFO

这个就可以求出来,这个CARRIER_NAME,一共有多少条记录,在这记录中STEP_STATUS的和一共是多少
(无列名) (无列名)
 354        595
大多数在使用count的时候,是搭配group by 一起来使用的,
因为,count只是返回给你数量,要是仅仅是返回select count(*)/count(字段) 就可以执行成功的。

但是要是这样select:
select count(*) ,OrderSn  from tabA,那你就是想知道OrderSn在TabA中有多少条记录,
但是OrderSn可能是一或者多个吧,为了区分开每一个OrderSn到底有多少个,那就是用Group by 进行区分

select COUNT(CONTACT_INFO) as CONTACT,ENABLED from CARRIER group by ENABLED

CONTACT ENABLED
 178     0
 74      1

这样就可以看出来,在CARRIER这个表中,ENABLED有两种情况,数量分别是178/74,这就是日常count和Group by 搭配的原因,指明具体的字段的不同值之间的数量



----------------------------------------------------------------------------------------------------------------------------------------

count(*) 和 count(1)和count(列名)区别 

做了下select ,是统计有多少条记录:

select count(1) from A
select count(*) from A
select count(CreateTime) from A

返回的都是A表中有多少条记录。

2. count(1) and count(字段)
两者的主要区别是
(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录
(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。 
转自:http://www.cnblogs.com/Dhouse/p/6734837.html

执行效率上:  
列名为主键,count(列名)会比count(1)快  
列名不为主键,count(1)会比count(列名)快  
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
如果有主键,则 select count(主键)的执行效率是最优的  
如果表只有一个字段,则 select count(*)最优。
转自:http://eeeewwwqq.iteye.com/blog/1972576
=======================================================================================================

原文地址:https://www.cnblogs.com/ZkbFighting/p/11637493.html