SQLite Studio中两数值列除法结果全为0的问题求助
整数除法导致SQL计算致死率结果为0的解决办法
问题出在整数除法的截断特性:当total_deaths和total_cases都是整数类型时,SQL会执行整数除法——直接舍弃小数部分,只保留整数结果。比如5/100会得到0,再乘以100自然还是0。而乘法运算不会触发这个问题,因为整数相乘仍为整数,结果正常。
修复方案
有两种常用方式避免整数截断:
- 用浮点常量强制转换运算类型
select location, date, total_cases, total_deaths, (total_deaths * 1.0 / total_cases) * 100 as DeathPercentage from MyNewDB.CovidDeaths order by location, date;
给其中一个数值乘以1.0,会让整个运算转为浮点型,保留小数部分。
- 显式转换字段类型
用CAST函数把整数字段转为浮点型:
select location, date, total_cases, total_deaths, (CAST(total_deaths AS FLOAT) / total_cases) * 100 as DeathPercentage from MyNewDB.CovidDeaths order by location, date;
为什么其他数据库正常?
不同数据库对整数除法的默认行为不同,部分数据库会自动将整数除法升级为浮点运算,而当前数据库严格遵循整数除法规则,所以出现差异。
内容的提问来源于stack exchange,提问作者klopezdata
相关产品推荐
相关产品推荐

