我有一个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