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 です。

編集 :

すべてを float にキャストした後の唯一の値は、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