【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 ...
随机推荐
- CentOS 7 下通过 Cython 编写 python 扩展
1. 安装 python 和 python-devel(没有后者,install 的时候会报错 "Scanners.c:21:20: fatal error: Python.h: No su ...
- MySQL精品学习资源合集 | 含学习教程笔记、运维技巧、图书推荐
MySQL凭借开源.免费.低门槛.稳定等优势,成为了当前最流行的关系型数据库之一.从1998年发行第一版以来,通过不断地更新迭代,MySQL被越来越多的公司使用,已然成为当下潮流. 为了帮助大家更好地 ...
- WiFi基础(六):天线基础知识
liwen01 2024.10.01 前言 麦克斯韦预言了电磁波的存在,赫兹通过实验证实了麦克斯韦的预言,马可尼基于无线电磁波的原理发明了无线电报系统,从此人类进入无线通信系统时代. 天线是通信系统中 ...
- 云原生周刊:Istio 1.19 发布 | 2023.9.11
开源项目推荐 Timoni Timoni 是 Kubernetes 的软件包管理器,由 CUE 提供支持,灵感来自 Helm. Timoni 项目致力于改善编写 Kubernetes 配置的用户体验. ...
- Minecraft小说
小说标题:<方块与冒险:勇者的传说> 持续更新中 故事简介: 主角艾伦(Alan)是一个普通的玩家,偶然之间被传送到Minecraft的世界中.这个世界充满了各种各样的奇迹.冒险.危险和谜 ...
- 别再忽视!PostgreSQL Public 模式的风险以及安全迁移
别再忽视!PostgreSQL Public 模式的风险以及安全迁移 作者:桦仔 10余年DBA工作经验 微信:debolop QQ交流群:740052625 公众号:数据库实战派 问题起因 前几天 ...
- Windows Server 开启远程桌面
工作中不可避免地经常要用到WindowsServer,为了使用的方便,配置了远程桌面,这里记录一下远程桌面配置过程中遇到的一些问题以及解决方法. Windows Server2008 R2 x64 1 ...
- 关于C++当中全局变量的释放问题
一.由来 主要是在修改公司的一个MFC项目的时候遇到的问题,我在MFC页面的析构函数当中对一个全局图像变量进行了释放,具体如下: ai_engine_OCR::~ai_engine_OCR() { / ...
- SSH通过本地开端口打远程隧道
ssh -R 你想让别人连得端口:带外IP:22 root@内网跳板机 -p内网跳板机端口 例如: ssh -R 8888:172.22.200.1:22 root@10.11.11.11 -p202 ...
- 题解:P6672 [清华集训2016] 你的生命已如风中残烛
题解:P6672 [清华集训2016] 你的生命已如风中残烛 标签 组合数学 分析 首先引入一个引理. Raney 引理 对于一个长度为 \(n\) 的序列 \(a\),如果 \(\sum\limit ...