RDBMS的加权投票处理

时间:2012-12-13 19:26:32

标签: mysql sql algorithm vote weighted-average

我的RDBMS中有三个表(通常是MySQL或Postgresql),我想在计算投票时使用它们。第一个是用户表,其中用户具有不同级别的拉(重量),第二个是记录他们对项目的投票的表,第三个是项目表本身。

我们的想法是,投票人或投票时间较长的用户在投票时应该有更多“权重”。

USER {
    id,
    weight int,
}

VOTE {
    vote int,
    user_id,
    item_id,
}

ITEM {
    id
}

除了投票数之外,我想根据用户投票的权重计算项目的投票。因此,如果用户100和101都具有1的权重并且投票得分为“3”,并且权重为10的用户102出现并且投票“5”,则我们为该用户102投票赋予更多的值。 / p>

也许简单的事情就像所有用户的总用户权重组合用于划分选票。

(user:weight * vote) / sum(user:weight))

也许我应该使用其他一些公式来衡量系统中权重最大的用户的力量。

如何计算第三个变量的投票,例如用户的权力?

对于那个母亲,我应该如何计算体重?也许我可以添加所有用户的综合权重,然后除以用户总数来找到我可以用来给用户增加1到100之间的权重的平均权重,这样就更容易使用。

1 个答案:

答案 0 :(得分:2)

你可以在聚合中进行算术运算:

select v.item_id,
       (case when sum(u.weight) > 0 then sum(u.weight * v.vote) / sum(u.weight) end) as weightedVote
from vote v join
     user u
     on v.user_id = u.id
group by v.item_id

如何计算权重是另一回事。该查询显示了如何使用它们。