2014-01-14 48 views
0

我有一張名爲product_reviews的投票表,其字段爲從1到5的ENUM,名爲rating我如何獲得平均評分並湊整至最接近的1?

我想從product_id 1665的所有行中獲得平均評分。我使用星級評分系統,因此平均值不能帶小數。必須是從1到5的數字。

非常感謝。

+1

你已經嘗試了什麼? – kero

+0

爲什麼使用枚舉字段類型而不是int字段類型? –

+0

我真的不知道。我只是擔心有人可能會嘗試使用1到5以外的數字發佈到我的表單。ENUM限制了我的信仰。但我是初學者,所以我可能不會這樣做。 – Mike

回答

1
SELECT round(avg(rating)) as average_review, 
     count(rating) as number_of_reviews 
FROM product_reviews 
WHERE product_id = 1665 

這裏需要使用round因爲avg將返回1.0和5.0之間的值,如果您使用floorceil你有效地從可能的結果消除1 5除非所有評論在產品上有那個分數。

此外,如果用戶能夠公開地看到產品獲得了50條評論和1星評價,並且1條評論評價爲2星級,那麼您將疏遠用戶,並且您在旁邊顯示的平均得分爲2星。它會讓你的網站顯得不可靠,這通常對於包含評論的網站來說不是一件好事。出於這個原因,大多數星級評分系統也能夠顯示部分星星,使其更加精確。

+0

這很快。謝謝!很棒!任何想法如何計算可用於product_id的評論數量? – Mike

+0

如果分數小於.5,'ROUND()'將向下舍入,使用['CEIL()'](http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html #function_ceil)總是四捨五入。 – Sammitch

+0

謝謝Sammitch。是的,我想整理一下。 – Mike