Sql server SQL Server计算返回0而不是浮点值
我尝试在SQL中执行以下操作以计算加权评级:Sql server SQL Server计算返回0而不是浮点值,sql-server,tsql,Sql Server,Tsql,我尝试在SQL中执行以下操作以计算加权评级: SELECT CTE_3.idProduct,(CTE_3.vote_count / (CTE_3.vote_count + @minimumVotesRequired)) * CTE_3.vote_mean + (@minimumVotesRequired / (CTE_3.vote_count+ @minimumVotesRequired)) * ((SUM(CTE_3.vote_mean)/COUNT(CTE_3.IdProduct))) AS
SELECT CTE_3.idProduct,(CTE_3.vote_count / (CTE_3.vote_count + @minimumVotesRequired)) * CTE_3.vote_mean + (@minimumVotesRequired / (CTE_3.vote_count+ @minimumVotesRequired)) * ((SUM(CTE_3.vote_mean)/COUNT(CTE_3.IdProduct))) AS WeightedRating
FROM CTE_3
GROUP BY CTE_3.IdProduct,
CTE_3.vote_count,
CTE_3.vote_mean
ORDER BY idProduct;
但是我面临的问题是结果总是0。。我尝试使用Convert(FLOAT,operation)作为WeightedRating,但结果仍然是0
当我在计算器上手动执行此操作时,它返回2.5416666
我应该做些别的事情而不是演员吗
这些数值是:
计票数为2票
平均票数是2.5
@所需最小电压为1
编辑:
现在,将所有内容转换为浮动后,唯一的值是CTE_3的2.5
SELECT CTE_3.idProduct,(CONVERT(FLOAT,CTE_3.vote_count) / (CONVERT(FLOAT,CTE_3.vote_count) + @minimumVotesRequired))
* CONVERT(FLOAT,CTE_3.vote_mean) +
(@minimumVotesRequired / (CONVERT(FLOAT,CTE_3.vote_count)+ @minimumVotesRequired))
* (SUM(CONVERT(FLOAT,CTE_3.vote_mean)))/COUNT(CTE_3.IdProduct)) AS WeightedRating
FROM CTE_3
GROUP BY CTE_3.IdProduct,
CTE_3.vote_count,
CTE_3.vote_mean
ORDER BY idProduct;
我缺少什么建议?如果CTE_3.vote_count类型为int或@minimumVotesRequired类型为int,则您将获得截断的int值。确保这些是浮点数,或者在进行除法之前将它们作为浮点数进行转换
另外,不要忘记COUNT是一个整数函数。您还需要将计数结果转换为浮点。各种组件列的数据类型是什么?投票计数是整数[或长或类似]?我刚刚编辑了我的代码,显然使用计数会破坏我的代码。。用2或3代替COUNT会抛出一个合适的值。我如何解决这个问题?我这样做了,但只得到了一个不被截断的值。如果在对int执行算术运算之前,确保对int的每个引用都被转换为float,您就不会看到这个问题。你能编辑你的问题以包含你的代码的最新版本吗?我刚刚编辑了我的代码,显然使用了计数来打破我的代码。。用2或3代替COUNT会抛出一个合适的值,我如何解决这个问题?这是因为COUNT是一个返回INT的函数。你也需要对它进行转换。转换(float,COUNT(..))同样,我将使用的一个快捷方式是乘以1.00。这将强制int表达式通过隐式转换生成浮点。