我正在尝试在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 WeightedRating
FROM CTE_3
GROUP BY CTE_3.IdProduct,
CTE_3.vote_count,
CTE_3.vote_mean
ORDER BY idProduct;
但我遇到的问题是结果总是0 ..我尝试使用转换(FLOAT,操作)AS WeightedRating但我仍然得到0的结果。
当我在计算器上手动执行此操作时,它返回2.5416666..so我非常确定SQL Server无法管理我提供给操作的值。
我应该做什么而不是演员吗?
价值观是: vote_count是2 vote_mean是2.5 @minimumVotesRequired是1
编辑:
现在,将所有内容转换为浮动后,唯一的值是来自CTE_3.vote_mean
的2.5SELECT 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;
我缺少什么建议?
答案 0 :(得分:4)
如果CTE_3.vote_count类型为int或@minimumVotesRequired类型为int,那么您将获得截断的int值。确保它们是漂浮物,或者在进行分割之前将它们作为浮子投射。
另外,不要忘记COUNT是一个整数函数。您还希望将COUNT的结果转换为浮点数。