相关文章推荐
拉风的绿豆  ·  迁移到 Azure MySQL ...·  1 月前    · 
焦虑的皮带  ·  在Linux ...·  1 月前    · 
有胆有识的泡面  ·  mySQL中怎么将dmp文件导入数据库开发者社区·  1 月前    · 
跑龙套的开水瓶  ·  MySql使用mysqldump ...·  1 月前    · 
坐怀不乱的小笼包  ·  Get-AzMariaDbConnectio ...·  4 周前    · 
孤独的大海  ·  增值税专用发票电子化试点纳税人端系统操作手册 ...·  9 月前    · 
怕老婆的水龙头  ·  VRAY正交相机_unity ...·  2 年前    · 
神勇威武的泡面  ·  缩小numpy数组的第三维,并对数值进行求和·  2 年前    · 
小胡子的台灯  ·  pyqt tableview ...·  2 年前    · 
深沉的黄豆  ·  深入URP之Shader篇15: ...·  2 年前    · 
Code  ›  Mysql中使用count加条件统计 - 墨天轮
mysql中间件 mysql执行计划 num mysql
https://www.modb.pro/db/11795
果断的汽水
2 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 工具
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库在线实训平台
      实操环境、开箱即用、一键连接
    • Oracle巡检
      简单两步,查看报告分析
    • AWR分析
      上传AWR报告,查看分析结果
    • SQL格式化
      快速格式化绝大多数SQL语句
    • SQL审核
      审核编写规范,提升执行效率
    • PLSQL解密
      解密超4000字符的PL/SQL语句
    • OraC函数
      查询Oracle C 函数的详细描述
    • Bethune X
      数据库智能监控巡检平台,90天试用
  • 暂无图片
    • 数据库
    • 云计算
    • 数据产品
    • 中间件
    • 操作系统
    • 芯片
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 云市场
    • 我的订单
    暂无图片
    觉得内容不错?
    一键收藏 方便随时查看
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / Mysql中使用count加条件统计

    Mysql中使用count加条件统计

    AlbertS 2019-11-24
    817

    版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

    最近发现在处理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)
    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> 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: 6 Duplicates: 0 Warnings: 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;
    ```sql`
    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的记录
     
    推荐文章
    拉风的绿豆  ·  迁移到 Azure MySQL 数据库的已知问题 | Microsoft Learn
    1 月前
    焦虑的皮带  ·  在Linux ECS实例上手动安装MySQL数据库-云服务器 ECS-阿里云
    1 月前
    有胆有识的泡面  ·  mySQL中怎么将dmp文件导入数据库开发者社区
    1 月前
    跑龙套的开水瓶  ·  MySql使用mysqldump 导入与导出方法总结 - sucre_tan
    1 月前
    坐怀不乱的小笼包  ·  Get-AzMariaDbConnectionString (Az.MariaDb) | Microsoft Learn
    4 周前
    孤独的大海  ·  增值税专用发票电子化试点纳税人端系统操作手册--简易版(20210106) _ 办税资料下载 _ 国家税务总局福建省税务局
    9 月前
    怕老婆的水龙头  ·  VRAY正交相机_unity 正交相机_3dmax摄像机正交视图 - 抖音
    2 年前
    神勇威武的泡面  ·  缩小numpy数组的第三维,并对数值进行求和
    2 年前
    小胡子的台灯  ·  pyqt tableview mysql_当数据库中添加了一个新条目时,如何在PyQt中更新TableView?_weixin_39602569的博客-CSDN博客
    2 年前
    深沉的黄豆  ·  深入URP之Shader篇15: Shader关键字和变体 - 掘金
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号