MYSQL评级算法

时间:2011-05-02 06:58:58

标签: mysql algorithm rating

我有一个MYSQL表,用于存储用户每个事件的评级,1-10表示事件表event_rating。我想要找到的是基于投票数和评级的最高准确评级:

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

--- MORE ---

我应该使用以下内容吗?

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

我需要的是一种计算总评分的准确方法,同时考虑到投票数量,评级必须介于1-10之间。

---更多细节---

我有一个表用户另一个事件,用户可以添加新事件并评估这些事件。 Events表有一个eventID,userid,event_rating列。因此,每个事件都可以保存用户创建的事件的评级。我想要的是计算所有事件评级,以获得该用户的最大(总)评级。无论用户创建了多少事件,我希望总得分在1-10之间,不超过10。那可能吗?如果没有任何解决方案或想法?

感谢阅读:)

1 个答案:

答案 0 :(得分:2)

这个愚蠢的查询是什么?

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

这不是什么

(a*b)/a总是b

您必须只提取AVG(d.event_rating)

你真的想要什么?