2011-05-02 49 views
0

我有一个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。那可能吗?如果没有任何解决方案或想法?

感谢您的阅读:)

回答

2

这是什么愚蠢的一块查询?

COUNT(d.event_rating)*AVG(d.event_rating)/COUNT(d.event_rating) as totalRating 

这是什么

(a*b)/a这始终是b

你只取AVG(d.event_rating)

你想要什么真正??

+0

用更多的信息和结果更新了我的问题。 – Zubair1 2011-05-02 09:05:14

+0

在数学上,问题仍然是一样的:因为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

+0

我不确定我的解决方案是什么。虽然要更清楚一点,至于我想要完成的事情,我更详细地更新了我的问题。 – Zubair1 2011-05-02 09:56:32