当前位置: 首页 > article >正文

Mysql COUNT() 函数详解

在使用Mysql的时候,作为开发者,聚合函数是肯定会用到的,下面就来说说我们常用到的统计行数的聚合函数 COUNT()。

COUNT() 的几种用法

说到COUNT() 函数,最常用的几种方法就是 COUNT(*) 、COUNT(1)、 COUNT(column),那么关于这几种 COUNT() 函数的不同之处这里就来详细说说,这里提前准备一个表并填充部分数据,比如

SELECT * FROM sys_post;

在这里插入图片描述

COUNT(*)

统计表中满足条件的所有的数据行数,包括 NULL 和重复项,比如

SELECT COUNT(*) FROM sys_post;

在这里插入图片描述

COUNT(1)

COUNT(1) 和 COUNT(*) 差不多,统计表中满足条件的所有数据行数,包括 NULL和重复项,比如

SELECT COUNT(1) FROM sys_post;

在这里插入图片描述

COUNT(column)

COUNT(column) 统计列名会统计满足条件的所有数据行数,不包括指定列名为 NULL的数据,比如

SELECT COUNT(create_by) FROM sys_post;

在这里插入图片描述

COUNT(*) 与 GROUP BY

这里统计不同 create_by 的数据行数,比如

SELECT create_by,COUNT(*) FROM sys_post GROUP BY create_by;

在这里插入图片描述

COUNT(*) 与 GROUP BY 和 HAVING

这类统计不同create_by 的数据行数,并筛选出 COUNT(*) > 1 的数据,比如

SELECT create_by,COUNT(*) FROM sys_post GROUP BY create_by HAVING COUNT(*)>1;

在这里插入图片描述

COUNT(expr) 的用法

COUNT(expr) 表示COUNT 统计带条件的指定列的数据

COUNT(DISTINCT expr)

统计指定字段去重后的数据行数,这里不会统计该字段为 NULL 的数据,同时对于该字段相同数值只统计一次,比如

SELECT COUNT(DISTINCT post_sort) FROM sys_post;

在这里插入图片描述

由于原始数据中有两个 post_port = 1 的数据,因此去重统计时会只统计一次。另外就是 COUNT(DISTINCT post_sort) 不会统计该列值为 NULL 的数据,比如这里去重统计 create_by

SELECT COUNT(DISTINCT create_by) FROM sys_post;

在这里插入图片描述

这是因为表中数据 create_by 只有 admin 和 NULL 两种数据,不统计 NULL 数据,去重后就只剩下数字 1 了。

COUNT(expr) 带条件查询

这里有一个场景,就是需要统计 create_by 不是 admin ,那么就需要用到 COUNT(expr) 中的条件了,首先给表 sys_post 增加两条数据,增加数据后如下
在这里插入图片描述

统计 create_by 不是 admin 的数据行数,如下

SELECT COUNT(if(create_by != 'admin',1,null)) FROM sys_post;

在这里插入图片描述

这里实际就是 COUNT(create_by) ,那么指定列字段的统计,不会计算 NULL 的数据,根据条件 create_by != ‘admin’ 计算得出就是只有 create_by 是 cc 、dd的两条数据了。
上面的查询语句也可以这样更改

SELECT COUNT(CASE WHEN create_by != 'admin' THEN 1 END) FROM sys_post;

查询结果是一样的效果
在这里插入图片描述

写在最后

以上就是Mysql 统计数据时常用到的 COUNT() 函数的几种场景,大家有需要的可以参考。


http://www.kler.cn/a/389003.html

相关文章:

  • Unity3D实现视频和模型融合效果
  • 文献解读-DNAscope: High accuracy small variant calling using machine learning
  • 字符及字符串(ASCII编码系统)
  • 24/11/12 算法笔记<强化学习> Policy Gradient策略梯度
  • stringUtils详细解释
  • 拦截器实现http请求访问本地图片
  • 手动实现promise的all,race,finally方法
  • 深入理解Linux内核中的虚拟文件系统(VFS)
  • Mac中禁用系统更新
  • g++/gcc版本切换
  • 传输协议设计与牧村摆动(Makimoto‘s Wave)
  • 18、论文阅读:AOD-Net:一体化除雾网络
  • 【系统架构设计师】高分论文:论企业集成平合的技术与应用
  • Linux五种IO模型和fctnl的使用
  • [护网杯 2018]easy_tornado
  • 中国药品注册审批数据库- 药品注册信息查询与审评进度查询方法
  • 《deep learning for AI》文献翻译及总结
  • DICOM(数字成像和通信医学)简介 【C#】
  • 移动应用开发:简易登录页
  • 用redis实现签到功能
  • 屏幕后期处理
  • 深度学习之卷积问题
  • Flutter鸿蒙next 使用 BLoC 模式进行状态管理详解
  • 【Axure视频教程】多选按钮控制元件显示和隐藏
  • 汽车共享管理:SpringBoot技术深度解析
  • 【Spring 框架】初识 Spring