我有一個MYSQL表,它存儲了一個用戶的每個事件的評級,1-10在事件表中稱爲event_rating。我試圖尋找是基於選票的數量和等級這樣的最高準確的評價:MYSQL評級算法
SELECT
c.userid,
c.user_name,
COUNT(d.event_rating) AS votesCount,
AVG(d.event_rating) AS votesAvg,
SUM(d.event_rating) AS tsum,
COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
FROM events d JOIN users c ON d.userid = c.userid WHERE (d.userid = '2') GROUP BY d.userid ORDER BY totalRating DESC
我添加了用戶在兩個虛擬的收視率,一個評級的10,另一個5。
結果如下:
userid user_name votesCount votesAvg tsum totalRating
2 Rahul Khanna 2 7.5000 15 7.50000000
是不是準確,我是計算是正確的?
---編輯---
發佈一些更多的結果
使用COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating
userid user_name votesCount votesAvg tsum totalRating
2 Rahul Khanna 2 7.5000 15 7.50000000
1 Rita Agnihotri 9 4.8889 44 4.88888889
3 Daniel Springs 4 3.5000 14 3.50000000
4 Roger Myers 6 3.5000 21 3.50000000
5 Chun Tanakat 3 3.0000 9 3.00000000
使用COUNT(d.event_rating)*AVG(d.event_rating) as totalRating
userid user_name votesCount votesAvg tsum totalRating
1 Rita Agnihotri 9 4.8889 44 44.0000
4 Roger Myers 6 3.5000 21 21.0000
2 Rahul Khanna 2 7.5000 15 15.0000
3 Daniel Springs 4 3.5000 14 14.0000
5 Chun Tanakat 3 3.0000 9 9.0000
---更多---
我應該使用下面的呢?
COUNT(d.event_rating)*AVG(d.event_rating)/10 as totalRating
我需要做的是計算總評分的準確的方式,把votesCount考慮以及和評級必須是1-10之間。
---更詳細---
我有一個表用戶的另一個活動,用戶能夠添加新的事件和速率的事件。 Events表中有一個eventID,userid,event_rating列。因此,每個事件都可以爲用戶創建的事件進行評級。我想要的是計算所有的事件評級,以獲得該用戶的最大(總)評級。無論用戶創建了多少個事件,我都希望總評分在1-10之間,不超過10。那可能嗎?如果沒有任何解決方案或想法?
感謝您的閱讀:)
用更多的信息和結果更新了我的問題。 – Zubair1 2011-05-02 09:05:14
在數學上,問題仍然是一樣的:因爲totalRating' COUNT(d.event_rating)* AVG(d.event_rating)/ COUNT(d.event_rating)等於'AVG(d.event_rating)作爲totalRating',因爲'(a * b)/ a'是'b'。 – 2011-05-02 09:15:03
我不確定我的解決方案是什麼。雖然要更清楚一點,至於我想要完成的事情,我更詳細地更新了我的問題。 – Zubair1 2011-05-02 09:56:32