【MySQL】求和查询,目标值int,但空数据时返回null的问题(Java)
问题分析
int selectDeviceMonthRepairCount(String deviceType, String month);
<select id="selectDeviceMonthRepairCount" resultType="int">
SELECT SUM(repair_count)
FROM warranty_records
WHERE device_type = #{deviceType}
AND nian_yue = #{month}
</select>
上面代码,在数据为空的时候,查询结果是null,会导致报错:
Mapper method 'com.aibaizhi.system.mapper.DashboardDataMapper.selectDeviceMonthRepairCount attempted to return null from a method with a primitive return type (int).
解决方案
解决办法就是查询的时候,如果为null,则设置一个默认值0
<select id="selectDeviceMonthRepairCount" resultType="int">
SELECT COALESCE(SUM(repair_count), 0)
FROM warranty_records
WHERE device_type = #{deviceType}
AND year_month = #{month}
</select>
SELECT COALESCE(SUM(repair_count), 0) 是一个SQL语句片段,它使用了COALESCE函数来确保查询结果始终返回一个值,即使SUM(repair_count)可能为NULL。
让我们分解这个语句:
SUM(repair_count):
这部分计算repair_count列的总和。但是,如果没有任何行满足查询条件(例如,给定的device_type和year_month没有匹配的记录),SUM函数可能会返回NULL。
COALESCE(..., 0):
COALESCE函数接受一系列参数,并返回第一个非NULL的值。在这个例子中,它检查SUM(repair_count)的值。
如果SUM(repair_count)是NULL(即没有匹配的记录),则COALESCE返回其第二个参数,即0。
如果SUM(repair_count)不是NULL(即至少有一条匹配的记录),则COALESCE返回SUM(repair_count)的实际值。
因此,整个语句的意思是:“计算repair_count的总和,但如果没有匹配的记录导致总和为NULL,则返回0。”
这在处理可能返回空集(即没有匹配记录)的查询时非常有用,因为它确保了你始终得到一个有效的整数值,而不是一个可能导致后续代码出现问题的NULL值。
【MySQL】求和查询,目标值int,但空数据时返回null的问题(Java)的更多相关文章
- 使用SQLServer2005插入一条数据时返回当前插入数据的ID
使用SQLServer2005插入一条数据时返回当前插入数据的ID 在执行完插入后 再执行 select @@identity from users 就OK 就是刚才插入的那行的 ID了 补充: @@ ...
- 用注解的方式实现Mybatis插入数据时返回自增的主键Id
一.背景 我们在数据库表设计的时候,一般都会在表中设计一个自增的id作为表的主键.这个id也会关联到其它表的外键. 这就要求往表中插入数据时能返回表的自增id,用这个ID去给关联表的字段赋值.下面讲一 ...
- DBUtils使用BeanListHandler及BeanHandler时返回null
一.使用Bean相关方法时返回null 问题描述: 使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,但使用BeanListHandler 和 BeanHandl ...
- Picasso加载网络图片失败,提示decodestream时返回null
最近遇到一个问题,项目用的图片加载框架是Picasso,网络加载框架是okhttp,项目在加载轮播图时有时可以正常加载,有时,会加载失败,提示decodestream时返回null. 首先,需要确定是 ...
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...
- 使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
1.原表没有设置主键,出现错误提示: ERROR tool.ImportTool: Error during import: No primary key could be found for tab ...
- 关于MYSQL的查询时间段、删除数据、查询目标行的命令用法。
Q1.第一次工作写命令时,写了一个把一个表的数据插入到另一个表中,运行时命令长时间处于执行状态. A.第一次处理数据库大量数据,长时间按运行属于正常现象,这与学校中的小数据不同. Q2.如何查询数据库 ...
- MySql LAST_INSERT_ID 【插入多条数据时】
LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...
- 工作随笔——mysql子查询删除原表数据
最近在开发的时候遇到一个mysql的子查询删除原表数据的问题.在网上也看了很多方法,基本也是然并卵(不是写的太乱就是效率太慢). 公司DBA给了一个很好的解决方案,让人耳目一新. DELETE fb. ...
- mysql/mariadb数据库在插入表数据时,ID竟然成奇数增加了?看完下面内容就知道怎么处理了。
今天突然被问到一个问题,mysql数据库插入表数据时,设置了ID自增,但是插入数据后,ID却呈奇数增加,不是123456类型,而是13579形式,突然有点懵,研究了一会,发现是auto_increme ...
随机推荐
- .Net 反射的学习
// 反射 // 一切从 type 开始 2 种拿到 type 的方式 // 作用:动态的操作对象 获取属性 方法 特性 // 1. 拿到对象的 type // typeof(类); // 2. 拿到 ...
- Proxy 与 Object.defineProperty对比?
1. Proxy 可以直接监听对象而非属性:但是 ,object.defineProperty 只能劫持对象的属性,从而需要对每个对象,每个属性进行遍历,如果,属性值是对象,还需要深度遍历.Proxy ...
- 云原生周刊:Gateway API v1.1 发布 | 2024.6.3
开源项目推荐 Grafana Tanka Tanka 是 Grafana 开发的一款用于 Kubernetes 的灵活.可重用和简洁的配置工具,是使用 YAML 进行 Kubernetes 配置的一种 ...
- KubeSphere 3.4.0 发布:支持 K8s v1.26
2023 年 07 月 26 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.4.0 正式发布! 让我们先简单回顾下之前三个大版本的主要变化: KubeSphere 3. ...
- git安装使用及连接gitlab集成idea
一.简介 Git是一个开源的分布式版本控制系统,通过git可以对项目进行代码托管,通常配合GitLub.Github使用: 想了解更多请进官网(官网下载较慢):https://www.git-scm. ...
- 入门级别 Nginx 常用配置清单
本文为转发文章,转发来自"https://mp.weixin.qq.com/s/ipUHaFPcDfIM9MsyqDGSEg",觉得不错分享给大家 Nginx 是一个高性能的 HT ...
- Docker和k8s核心概念(理解友好版)
背景 这是在HWL负责网校云业务线测试时,给同事分享的基础概念文档. 目录: 一. Docker核心概念 二. Kubernetes是什么及架构 三. Kubernetes核心概念 四. Deploy ...
- 0.2 Afterword to the Tenth Anniversary Edition(2010)
近十年来的进展: 1. 在实验实施领域. 超导电路:2-qubit量子算法:3-qubit 系统. 基于核自旋和单光子: 演示'量子纠错'和'量子模拟' 离子阱系统: '量子搜索算法'和'量子傅里叶变 ...
- openEuler搭建k8s(1.28.2版本)
目录 k8s搭建(1.28.2版本) 1. 安装containerd 1.1 下载tar包 1.2 编写服务单元文件 2. 安装runc 3. 安装cni插件 3.1 下载文件 3.2 设置crict ...
- IDEA方法模板、类模板设置记录
类模板 设置入口 Mac:common+,进入设置->Editor->File and Code Templates->Includes 模版代码 /** * todo * * @a ...