Mysql中count带条件计数实例代码

 更新时间:2023年09月10日 09:19:29   作者:lr_24353  
这篇文章主要给大家介绍了关于Mysql中count带条件计数的相关资料,Mysql中count()函数的一般用法是统计字段非空的记录数,所以可以利用这个特点来进行条件统计,需要的朋友可以参考下

count 带条件计数

mysql 统计条数很简单, 使用 count 函数就行,但是带条件统计,可能有些小伙伴跟我一样,还有些疑问,废话不多说 上代码

表中三条数据

1. count(*) 和 count(字段) :

区别:count(*) 包含 null 值的条目,count(字段) 则不包含

例如:

select count(*) from sys_user // 返回 3 条数据
select count(name) from sys_user // 返回 2数据,就是将name字段为null的去除了

2.加条件count用法

例:求 age 小于 19 人数

select count(age <  19 or null) from sys_user // 返回 1条数据

条件可以随便写( > 、<、=、is null 等等),但是必须加上 or null ,否则统计出来 就是 3 条;

其他写法,效果一致:

select count(if(age <  19, 1, null)) from sys_user // 返回 1条数据
select count(case when age <  19 then 1 end) from sys_user // 返回 1条数据

附:count(1)和count(*)和count(列名)的区别

1.函数说明

  • count(1):统计所有的记录(包括null)。
  • count(*):统计所有的记录(包括null)。
  • count(字段):统计该"字段"不为null的记录。
  • count(distinct 字段):统计该"字段"去重且不为null的记录。

count(1)中的1并不是表示第一个字段,而是表示一个固定值。其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1。count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。

2.执行效率

他们之间根据不同情况会有些许区别,MySQL 会对count()做优化。(1)如果表中只有一列,则count( )效率最优。(2)如果表有多列,且存在主键,count (主键列名)效率最优,其次是:count (1) >count( *)。(3)如果表有多列,且不存在主键,则count(1 )效率优于count( *)

3.执行过程

  • count(*)包括了所有的列,相当于行数,在统计结果的时候, 包括列值为NULL的行。
  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候, 包括列值为NULL的行。
  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数, 即某个字段值为NULL时,不统计。

4.注意事项

阿里开发手册规范相关规定:

1.【强制】不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的标 准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关. 说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行.

2.【强制】count(distinct col) 计算该列除 NULL 之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为 NULL,那么即使另一列有不同的值,也返回为 0.

总结 

到此这篇关于Mysql中count带条件计数的文章就介绍到这了,更多相关Mysql count带条件计数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论