You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中使用SUM计算评分百分比及归一化结果的问题

你的SQL问题解决方案

嘿,我来帮你搞定这两个SQL查询的问题!

问题1:结果始终为0的原因与修复

你遇到的问题核心是SQL的整数除法特性:当两个整数相除时,数据库会自动截断小数部分,只返回整数结果。比如你的sum(R_Value)=6,5/cast(sum(R_Value) as int)其实是5/6,整数除法下结果是0,再乘以100自然还是0。

解决办法很简单:只要把其中一个操作数转换成浮点型,让除法运算变成浮点除法就行。这里有几种写法:

-- 写法1:把5改成浮点型5.0,触发浮点除法
select sum(R_Value), ((5.0 / sum(R_Value)) * 100.0) 
from R_Rating 
where R_B_Id = 135;

-- 写法2:把sum的结果转成float,同样实现浮点除法
select sum(R_Value), ((5 / cast(sum(R_Value) as float)) * 100.0) 
from R_Rating 
where R_B_Id = 135;

这两种写法都会得到(5/6)*100≈83.333333的正确结果。

问题2:生成1-5区间评分并控制小数位数/取整

针对你想要结合评分总和与人数生成1-5区间评分的需求,我们可以用ROUND()函数来控制小数位数,或者用类型转换来取整。

保留一位小数

用ROUND(表达式, 1)来实现四舍五入保留一位小数:

select sum(R_Value), 
       ROUND(((count(*)/cast(sum(R_Value) as float)) * 10), 1) as score
from R_Rating 
where R_B_Id = 135;

取整(四舍五入)

用ROUND(表达式, 0)让结果变成整数:

select sum(R_Value), 
       ROUND(((count(*)/cast(sum(R_Value) as float)) * 10), 0) as score
from R_Rating 
where R_B_Id = 135;

直接截断小数取整(不四舍五入)

如果不需要四舍五入,直接截断小数部分,可以用CAST()转成整数:

select sum(R_Value), 
       CAST(((count(*)/cast(sum(R_Value) as float)) * 10) as int) as score
from R_Rating 
where R_B_Id = 135;

或者用FLOOR()(向下取整)、CEILING()(向上取整)函数,根据你的具体需求选择。

内容的提问来源于stack exchange,提问作者redoc01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:47:39