Mysql中count带条件计数实例代码
作者:lr_24353
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带条件计数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!