Mysql中使用count加条件统计的实现示例


前言 最近发现在处理mysql问题时 , count()函数频繁上镜 , 常常出现在分组统计的情景下 , 但是有时候并不是使用group by分好组就可以直接统计了 , 比如说一个常见的需求 , 统计每个班级男生所占的比例 , 这种情况一般会按照班级分组 , 但是分组内不但要统计班级的人数 , 还要统计男生的人数 , 也就是说统计是有条件的 , 之前确实没有考虑过怎样实心 , 后来查询了资料 , 总结在这里 , 方便日后查找使用 。
mysql中count()函数的一般用法是统计字段非空的记录数 , 所以可以利用这个特点来进行条件统计 , 注意这里如果字段是null就不会统计 , 但是false是会被统计到的 , 记住这一点 , 我们接下来看看几种常见的条件统计写法 。
测试环境

windows 10
welcome to the mysql monitor. commands end with ; or \g.
your mysql connection id is 7
server version: 5.7.21-log mysql community server (gpl)
copyright ? 2000, 2018, oracle and/or its affiliates. all rights reserved.
oracle is a registered trademark of oracle corporation and/or its affiliates. other names may be trademarks of their respective owners.
type ‘help;’ or ‘\h’ for help. type ‘\c’ to clear the current input statement.

准备工作 新建一个mysql数据表a , 包含id和num两个字段
【Mysql中使用count加条件统计的实现示例】mysql> create table a(id int, num int);query ok, 0 rows affected (0.04 sec)插入测试数据 , 为了看count()函数的效果 , 我们插入两个空数据
mysql> insert into a values (1,100),(2,200),(3,300),(4,300),(8,null),(9,null);query ok, 6 rows affected (0.01 sec)records: 6duplicates: 0warnings: 0查询表a中的数据 , 与后面的统计做比较
mysql> select * from a;+----+------+| id | num|+----+------+|1 |100 ||2 |200 ||3 |300 ||4 |300 ||8 | null ||9 | null |+----+------+6 rows in set (0.09 sec)调用count()函数看效果 , 如果使用count(*)会查询出所有的记录数 , 但如果使用count(num)发现只有4条数据 , num为null的记录并没有统计上
mysql> select count(*) from a;+----------+| count(*) |+----------+|        6 |+----------+1 row in set (0.03 sec)mysql> select count(num) from a;+------------+| count(num) |+------------+|          4 |+------------+1 row in set (0.04 sec)
条件统计 count()函数中使用条件表达式加or null来实现 , 作用就是当条件不满足时 , 函数变成了count(null)不会统计数量
mysql> select count(num > 200 or null) from a;+--------------------------+| count(num > 200 or null) |+--------------------------+|2 |+--------------------------+1 row in set (0.22 sec)count()函数中使用if表达式来实现 , 当条件满足是表达式的值为非空 , 条件不满足时表达式值为null;
mysql> select count(if(num > 200, 1, null)) from a;+-------------------------------+| count(if(num > 200, 1, null)) |+-------------------------------+|2 |+-------------------------------+1 row in set (0.05 sec)count()函数中使用case when表达式来实现 , 当条件满足是表达式的结果为非空 , 条件不满足时无结果默认为null;
mysql> select count(case when num > 200 then 1 end) from a;+---------------------------------------+| count(case when num > 200 then 1 end) |+---------------------------------------+|2 |+---------------------------------------+1 row in set (0.07 sec)
总结 使用count()函数实现条件统计的基础是对于值为null的记录不计数 , 常用的有以下三种方式 , 假设统计num大于200的记录
  • select count(num > 200 or null) from a;
  • select count(if(num > 200, 1, null)) from a
  • select count(case when num > 200 then 1 end) from a
到此这篇关于mysql中使用count加条件统计的实现示例的文章就介绍到这了,更多相关mysql count条件统计内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
-- 展开阅读全文 --

    推荐阅读