【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 ...
随机推荐
- C#查漏补缺----对象内存结构与布局
环境变量 .Net Core 8.0 Windows 11 64位 内存布局 引用类型 在.NET中,数据会按照类型分为不同的对象,对于引用类型的实例,由一个对象标头(Object Header)和方 ...
- windows下安装部署 hadoop
一.安装下载 1.首先在hadoop官网下载一个稳定版本,选择binary包 官网地址:https://hadoop.apache.org/releases.html 下载下来是tar.gz文件,用w ...
- 2024Ciscn总决赛Web Writeup
前言 鸽了三个月的复现计划:) ezjs 考点是express引擎解析的一个trick,在高版本的express已经修复,先贴源码 const express = require('express') ...
- 一文了解 Conda(包教包会,不会留言)
Conda 使用指南 Conda 是一个开源包管理和环境管理系统,能够以跨平台的方式进行软件包的安装.管理和依赖管理,特别适用于 Python 和 R 语言的环境管理.本文整理了常见 Conda 命令 ...
- .NET周刊【10月第4期 2024-10-27】
国内文章 C#实现信创国产Linux麦克风摄像头推流(源码,银河麒麟.统信UOS) https://www.cnblogs.com/shawshank/p/18494362 随着国际形势变化,软件信创 ...
- 使用 ollama 在本地试玩 LLM
在 chatGPT 的推动下.LLM 简直火出天际,各行各业都在蹭.听说最近 meta 开源的 llama3 模型可以轻松在普通 PC 上运行,这让我也忍不住来蹭一层.以下是使用 ollama 试玩 ...
- AOT使用经验总结
一.引言 站长接触 AOT 已有 3 个月之久,此前在<好消息:NET 9 X86 AOT的突破 - 支持老旧Win7与XP环境>一文中就有所提及.在这段时间里,站长使用 Avalonia ...
- Antlr4 语法解析器(下)
Antlr4 的两种AST遍历方式:Visitor方式 和 Listener方式. Antlr4规则文法: 注释:和Java的注释完全一致,也可参考C的注释,只是增加了JavaDoc类型的注释: 标志 ...
- 2021“MINIEYE杯”(1)
Start Time : 2021-07-20 12:10:00 End Time : 2021-07-20 17:10:00 1001-Mod, Or and Everything 真正的签到题 题 ...
- Python 抓取猫眼电影排行
import json import re import requests from requests.exceptions import RequestException import time # ...