2013-06-05 30 views
3

我試圖做的SQL如下操作來計算加權的評價:SQL服務器計算返回0,而不是一個浮點值

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,操作)作爲WeightedRating但我仍然得到0的結果。

當我在計算器上手動執行此操作時,它返回2.5416666..so我確信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; 

有什麼建議我錯過了什麼?

+1

各種組件列的數據類型是什麼?是vote_count一個整數[或長或類似]? – Joe

+0

把它們當作float float – meda

+0

我剛剛編輯了我的代碼,顯然使用COUNT會破壞我的代碼。將COUNT中的2或3替換爲合適的值將如何解決此問題? –

回答

3

如果CTE_3.vote_count類型是int或者@minimumVotesRequired類型是int,那麼您將得到截斷的int值。確保這些是浮動的,或者在進行你的分區之前將它們作爲浮子投射。

另外,不要忘記COUNT是一個整數函數。您也希望將COUNT的結果作爲浮點數來投射。

+0

我這樣做了,但只有一個值不會被截斷 –

+1

如果確保在對它執行算術運算之前,每次對int的引用都被轉換爲float值,則不會看到這個問題。你能編輯你的問題以包含你的代碼的最新版本嗎? –

+1

我剛剛編輯了我的代碼,顯然使用COUNT打破了我的代碼..將2或3替換爲COUNT會引發相應的值,我該如何解決這個問題? –