4

我正在尝试在 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 .. 我尝试使用 Convert(FLOAT,operation) AS WeightedRating 但我仍然得到 0 的结果。

当我在计算器上手动执行此操作时,它返回 2.5416666..所以我很确定 SQL Server 无法管理我提供给操作的值。

除了演员表,我还应该做点别的吗?

值是: vote_count 是 2 vote_mean 是 2.5 @minimumVotesRequired 是 1

编辑 :

现在将所有内容转换为浮动后的唯一值是 CTE_3.vote_mean 的 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;

关于我缺少什么的任何建议?

4

1 回答 1

4

如果 CTE_3.vote_count 类型为 int 或 @minimumVotesRequired 类型为 int,那么您将获得截断的 int 值。确保这些是浮点数,或者在进行除法之前将它们转换为浮点数。

另外,不要忘记 COUNT 是一个整数函数。您还需要将 COUNT 的结果转换为浮点数。

于 2013-06-05T16:33:12.367 回答