根据投票获得加权评级

时间:2017-12-28 07:34:38

标签: mysql

我有一张名为"访问"包含cols:" rid" (房间ID),"评级"。

表格:访问次数

node.js

如上所示,每次访问都有一个从0到10的选项。

我不希望将0票作为票数。

现在我一直在使用这个查询来获得评分最高的房间(但是有重量!所以10票的1票优于9票的40票)。

例如,输出:

-----------------
| rid  | rating |
-----------------
|   5  |   8    |
|   5  |   6    |
|   8  |   9    |
|   5  |   7    |
|   5  |   0    |
|   4  |   5    |
-----------------

查询:

-----------------
| rid  | rating |
-----------------
|   5  |  7.42  |
|   8  |  6.94  |
|   4  |  6.43  |
-----------------

我觉得输出不是很准确。

您是否在代码中看到任何问题?感谢。

1 个答案:

答案 0 :(得分:1)

我猜加权平均值你会需要像

这样的东西
SELECT rid ,
COUNT(*) room_votes,
SUM(v.rating) room_rating,
(SUM(v.rating)/(t.total_votes * 10)) weighted_rating,
t.total_votes 
FROM visits v
CROSS JOIN (SELECT 
        COUNT(*) total_votes 
        FROM visits 
        WHERE rating <> 0
) t
WHERE v.rating <> 0
GROUP BY v.rid

DEMO

  

weighted_rating =每个房间的评级总和/表中所有房间的所有投票数和* 10(由于评级范围1 - 10)

样本输出

================================================================
   rid  room_votes  room_rating  weighted_rating  total_votes  
------  ----------  -----------  ---------------  -------------
     4           1            5           0.1000              5
     5           3           21           0.4200              5
     8           1            9           0.1800              5
================================================================