SQL Server 计算返回 0 而不是浮点值

Bry*_*can 5 t-sql sql-server

我正在尝试在 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;
Run Code Online (Sandbox Code Playgroud)

但我面临的问题是结果始终为 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;
Run Code Online (Sandbox Code Playgroud)

我缺少什么有什么建议吗?

Bil*_*egg 4

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

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

  • 这是因为 COUNT 是一个返回 INT 的函数。你也需要投射它。转换(浮点数,计数(....)) (2认同)