《MySQL》第十四篇 COUNT(*)和 COUNT(1)的区别

news2025/1/16 9:13:30

本文旨在介绍COUNT(*),COUNT(1),COUNT(col)三者之间区别和使用索引的情况,count() 函数是用来统计行数用的,以下内容均是个人实践模拟结果,仅供参考;
阿里规范中详细描述了三者之间的区别,验证下:
在这里插入图片描述

## 建表
CREATE TABLE t_user (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) NULL COMMENT '用户名',
  `mobile` varchar(50) NULL COMMENT '手机号',
  `address` varchar(255) NULL COMMENT '地址',
  PRIMARY KEY (`id`),
  UNIQUE INDEX `index_id`(`id`) USING BTREE COMMENT '主键索引'
);

##创建存储过程,向表中插入10万条数据
CREATE PROCEDURE `insert_user`()
BEGIN
	DECLARE i INT DEFAULT 1;
  START TRANSACTION;
  WHILE i <= 100000 DO
    INSERT  t_user (name,mobile,address) VALUES (CONCAT('maker_', i),CONCAT('1530000111', i),CONCAT('上海市浦东新区_', i));
    SET i = i + 1;
  END WHILE;
  COMMIT;
END;

## 执行存储过程
CALL insert_user();

COUNT * 与 COUNT(1) 写法

t_user 表中的10万条数据,没有字段为null的, 分别执行count(*) 和 count(1), 二者结果都是10万条
在这里插入图片描述
在这里插入图片描述
将其中的部分数据中name字段更新为null,再验证结果

##创建存储过程,将表中前10000条数据中的name字段设置为null
CREATE PROCEDURE `update_user`()
BEGIN
	DECLARE i INT DEFAULT 1;
  START TRANSACTION;
  WHILE i <= 10000 DO
	 UPDATE t_user set name = null where id = i;
   SET i = i + 1;
  END WHILE;
  COMMIT;
END;

## 执行存储过程
CALL update_user();

再次分别执行count(*) 和count(1), 结果依然都是10万条数据
在这里插入图片描述
在这里插入图片描述

所以,count(*) 和 count(1) 在统计行数上是没有区别的,都是统计表中的总行数,不区分字段是否有null

COUNT(col) 写法

同样,t_user 表中的10万条数据,且name字段有10000行是null,执行count(name)来统计行数
在这里插入图片描述
结果显示9万条数据,再恢复name字段都有值,不为null,再次执行count(name)来统计行数
在这里插入图片描述
结果是10万条数据,所以count(col) 只能统计字段不为null的行,字段为null的行会被过滤

COUNT(DISTINCT col1, col2) 写法

DISTINCT 意思是去重,恢复t_user表数据,name和mobile字段全部不为null,执行count(DISTINCT name, mobile)语句
在这里插入图片描述
因为name和mobile字段数据均不相同,所以执行结果是10万条;将mobile字段更新1万条数据为null,name不变,再次执行count(DISTINCT name, mobile)语句

##创建存储过程,将表中前10000条数据中的mobile字段设置为null
CREATE PROCEDURE `update_user_mobile`()
BEGIN
	DECLARE i INT DEFAULT 1;
  START TRANSACTION;
  WHILE i <= 10000 DO
	 UPDATE t_user set mobile= null where id = i;
   SET i = i + 1;
  END WHILE;
  COMMIT;
END;

## 执行存储过程
CALL update_user_mobile();

在这里插入图片描述
结果是9万条,所以DISTINCT去重,会过滤字段为null的行

NPE

在这里插入图片描述
NPE(NullPointerException): 空指针异常,当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为NULL;
将t_user表中的mobile字段全部设置为null,分别执行count(mobile)和sum(mobile)语句
在这里插入图片描述
在这里插入图片描述
假如此时程序代码需要sum函数计算的结果来处理业务逻辑,此时返回了NULL,如果程序未判空操作,那么就会报空指针异常,因此使用 sum()时需注意 NPE 问题。
使用IFNULL函数可解决NPE问题,如果sum结果是NULL,就给个默认值0,可避免NPE问题
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

seata 启动报错 Could not create connection to database server

文章目录 报错信息1、驱动包问题2、高版本驱动类名称问题3、url 时区问题4、驱动包位置问题 环境&#xff1a; 操作系统&#xff1a;windows 10seata版本&#xff1a;seata-server-1.6.1数据库版本&#xff1a;mysql 8.0.33 报错信息 seata启动报错com.mysql.jdbc.exception…

流程图如何制作?5步快速画出好看的流程图!

流程图是一种图形化工具&#xff0c;描述某个过程或者操作的步骤&#xff0c;以及某种业务系统的具体流程。流程图通常由各种图形符号、形状、箭头组成&#xff0c;可以清晰的表示出流程或系统中各种步骤、每个环节之间的关系、条件判断、数据的流动和处理过程等。 在线流程图软…

npm install时出现的问题Failed at the node-sass@4.14.1 postinstall script

从阿里云上拉取下来项目后&#xff0c;首先使用npm install 命令进行安装所需依赖&#xff0c;意想不到的事情发生了&#xff0c;报出了Failed at the node-sass4.14.1 postinstall script&#xff0c;这个问题&#xff0c;顿时一脸懵逼&#xff1b;询问前端大佬&#xff0c;给…

斯坦福:小鼠植入人脑组织后继续生长

美国科学家的一项新研究表明&#xff0c;移植到大鼠体内的微型人脑结构可以发送信号&#xff0c;并对大鼠胡须感受到的环境线索作出反应。该研究证明从人类干细胞中生长的神经元可以与活体啮齿动物的神经细胞结合&#xff0c;或可为人类大脑疾病的治疗提供新方法。相关研究结果…

《云管理产品与服务图谱(2023)》发布!MIAOYUN荣登【运维平台】板块

2023年7月25日&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;和中国通信标准化协会联合主办的2023第十届可信云大会在北京召开。大会以“云领创新 算启新篇”为主题&#xff0c;就云计算产业发展现状和趋势等进行了研讨&#xff0c;并发布了《…

Linux权限小结

Linux权限小结 权限的基本介绍 ls -l中显示的内容如下&#xff1a;drwxr-xr-x. 2 yinjun yinjun 87 8月 2 16:24 test&#xff0c;如下图所示 前十位介绍 其中&#xff0c;0-9位为drwxr-xr-x&#xff0c;其说明情况如下 第0位确定文件类型&#xff0c;包括d&#xff0c;-&a…

Webots资源缓存文件包的使用方法

已经很久没有使用过Webots了&#xff0c;现在发现&#xff0c;资源包变成了在线加载&#xff0c;但是加载的实在太慢了&#xff0c;在官方github的release界面发现提供了离线包&#xff0c;以R2023b为例&#xff1a; 下载完后&#xff0c;将该压缩文件内的二进制缓存文件复制到…

与它更近一步,MySql怎么这么多的锁?

我们大多都知道行锁锁住的是一行数据&#xff0c;也知道怎么避免行锁造成的阻塞语句问题&#xff0c;但是还是有很多复杂情况&#xff0c;去加了很多锁&#xff0c;如间隙锁以及next-key lock&#xff0c;甚至他们的混合锁&#xff0c;如果这个不了解&#xff0c;搞不好就是语句…

为什么流程工业需要合适的预测性维护方案?

在当今工业中&#xff0c;预测性维护是一项至关重要的战略&#xff0c;它能够帮助企业预测设备故障并防止代价高昂的停机。然而&#xff0c;对于流程制造和离散制造来说&#xff0c;选择合适的预测性维护解决方案是至关重要的&#xff0c;因为这两类行业在设备运营和维护方面存…

商机管理是什么?如何有效地进行商机管理?

本篇文章&#xff0c;您可以了解&#xff1a;1、商机管理是什么&#xff1b;2、如何做好商机管理。 在当今竞争激烈的商业世界&#xff0c;商机就像隐藏在茫茫大海中的珍宝&#xff0c;等待着智慧的航海家去发现。作为一名经验丰富的顾问&#xff0c;我将与你一同探索商机管理…

使用idea实现git操作大全(在项目开发中遇到的实际情况

使用idea实现git操作大全&#xff08;在项目开发中遇到的实际情况&#xff09; 1.安装git插件2.在开发中切记拉一个自己的分支 1.安装git插件 2.在开发中切记拉一个自己的分支 选中需要拉的分支&#xff0c;右键该分支&#xff0c;选中new breach from “分支”&#xff0c;点…

2023 电赛 E 题 K210 方案--K210实现矩形识别

相关库介绍 sensor&#xff08;摄像头&#xff09; sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(10) reset()&#xff1a;重置并初始化单目摄像头 set_pixformat()&#xff1a;设置摄像头输出格式&#xff0c…

开发框架软件公司:与之携手,共同开启办公流程化之路!

在快节奏的社会里&#xff0c;如何提高企业的办公效率&#xff1f;如何让各部门之间的协作关系更为顺畅&#xff1f;如何把企业内部的数据真正利用起来&#xff0c;成为高层做出经营决策的重要依据&#xff1f;其实&#xff0c;要做到这些&#xff0c;与开发框架软件公司联手合…

无人机机巢有哪些,无人机机场/机场的主要分类

随着无人机技术的飞速发展&#xff0c;无人机已经渗透到了物流、农业、救援、公共安全等多个领域。而为了使这些无人机能更加高效、灵活地运行&#xff0c;一个新的概念应运而生&#xff0c;那就是无人机机巢&#xff08;UAV Nest&#xff09;。复亚智能无人机机巢是一种供无人…

8.3一日总结

1.远程仓库的使用 a.克隆远程仓库 1>.在桌面克隆远程仓库 git clone 仓库名 2>.修改仓库内容 3>添加目录 git add. 4>提交: git commit -m 完成登录功能 5>推送提交远程仓库 : git push origin master -u 6>更改推送:git push(简写形式) 需要先添加,再提交,最…

学习潘海东博士的《潮汐调和分析原理和应用》和调和分析软件S_Tide

潘海东博士在B站&#xff08;用户名&#xff1a;ocean_tide&#xff09;分享了他的电子书《潮汐调和分析原理和应用》&#xff0c;以及他开发的潮汐调和分析工具包S_Tide&#xff0c;非常厉害。 水文同事在进行潮汐预报的时候&#xff0c;会经常说到调和分析和调和常数&#x…

AI无监督异常检测项目记录

前言 半年时间没更新博客&#xff0c;这期间主要验证搞通了几个最适合无监督项目落地的网络&#xff0c;选了几个比较好的网络进行落地部署。 进度 --------------------------------------------------------------------------------------------------------------------…

全面解析大语言模型的工作原理

当ChatGPT在去年秋天推出时&#xff0c;在科技行业乃至世界范围内引起了轰动。当时&#xff0c;机器学习研究人员尝试研发了多年的语言大模型&#xff08;LLM&#xff09;&#xff0c;但普通大众并未十分关注&#xff0c;也没有意识到它们变得多强大。 如今&#xff0c;几乎每个…

ICMP协议(Internet控制消息协议)

系列文章目录 华为数通学习&#xff08;3&#xff09; 目录 前言 一&#xff0c;什么是ICMP协议&#xff1f; 二&#xff0c;实例&#xff1a;路由之间相互直连ping 三&#xff0c;了解ICMP报文 ​编辑 3.1&#xff0c;为什么要了解这个字段呢? 四&#xff0c;ICMP重定…

全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

为了方便用户了解ZMC432H&#xff0c;本节课程主要给大家介绍一下全国产EtherCAT运动控制边缘控制器ZMC432H的硬件接口与功能。 一、功能简介 全国产EtherCAT运动控制边缘控制器ZMC432H是正运动的一款软硬件全国产自主可控&#xff0c;运动控制接口兼容EtherCAT总线和脉冲型的…