当前位置:   article > 正文

SQL---count()_sql count

sql count

一、count()

count() : 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值

性能对比:
count(*)=count(1)>count(id)>count(字段)

**sum()与count()区别:**

Sum() ---------返回表达式中所有的总和
函数里面的参数是列名的时候,是计算列名的值的相加,而不是有值项的总数。

count() ---------- 返回表中的行数

函数里面的参数是列名的的时候,那么会计算有值项的次数。 (NULL 不计入, 但是’'值计入)

二、count(1) 、count(*) 、count(字段) 区别(在InnoDB下)

count(1):

InnoDB 遍历全表,但是不取值,server 层对返回的每一行数据新增一个1,然后进行判断累加。包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL。

count(*):

返回的行一定不是空。扫描全表,但是不取值,按行累加。包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL

count(字段):

进行全表扫描,然后判断指定字段的值是不是为NULL,不为NULL则累加。只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。

**总结**

1.count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。

2.count(1)和count(*) 都是检索表中所有记录行的数目,不论其是否包含null值。

3.count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录。

三、COUNT(条件表达式)

解释:
COUNT(条件表达式):不管记录是否满足条件表达式,只要非NULL就加1。

case—when方法

case—when:当条件满足是表达式的结果为非空,条件不满足时无结果默认为NULL

格式:count(case when(条件) then 列名 end)

or null 方法:

Count(表达式 Or null) :作用就是当条件不满足时,函数变成了count(null)不会统计数量

具体解释: count在值是NULL是不统计数, (count(‘任意内容’)都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数),至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。
如count(sex= ‘男生’ or NULL) 当sex不为男生时sex= ‘男生’ or NULL 的结果是NULL(结果false,不是 NULL),Count才不会统计上这条记录数

if 判断

COUNT(IF(is_reply=1,1,NULL)) :当条件满足是表达式的值为非空,条件不满足时表达式值为NULL

格式:
IF(condition,expression_1,expression_2):逻辑为:如果condition为true,返回expression_1,否则
返回expression_2

例:COUNT(IF(is_reply=1,1,NULL)) —如果is_reply=1,IF函数将返回1,否则返回NULL。
COUNT函数只计数1,而不是NULL值,因此查询根据相应的状态返回记录数。

具体例子:
表(info)
在这里插入图片描述
结果:
在这里插入图片描述
方法一(case–when):

select  
    data,  
    count(case when result='low' then 1 end) as low,  
    count(case when result='high' then 1 end) as high
from info 
group by  data;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

方法二(or null):

select
    data,
    count(result='low' or null) as low,
    count(result='high' or null) as high 
from info 
group by data;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

方法三(if 判断):

select
    data,
    count(if(result='low',1,null)) as low,
    count(if(result='high',1,null)) as high
from info 
group by data;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

补充关于count(1)count(*)原理 引用百度知道专业回答

  1. count(1),其实就是计算一共有多少符合条件的行。 1并不是表示第一个字段,而是表示一个固定值。
    其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.

  2. count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/910940
推荐阅读
相关标签
  

闽ICP备14008679号