mysql - RDBMS 的加权投票处理

标签 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 的投票分配更多的值(value)。

也许是一些简单的事情,比如所有用户的总用户权重加起来用于划分选票。

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

也许我应该使用一些其他公式来绘制系统中具有最大权重的用户的功率曲线。

如何在考虑用户权力等第三个变量的情况下计算选票?

对于那个mater,我应该如何计算重量?或许我可以将所有用户的总权重相加,然后除以用户总数,找到一个平均权重,我可以用它来为用户赋予 1 到 100 之间的权重,这样更容易处理。

最佳答案

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

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

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

关于mysql - RDBMS 的加权投票处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866959/

相关文章:

sql - 如何从sql表中获取子字符串?

algorithm - 具有截止值的相对权重

php - SQLSTATE[HY000] [2003] 无法连接到 MySQL 服务器,出现 '127.0.0.1' (61) 错误 Laravel 4.1

MySQL - 在分区之间移动数据,也称为重新分区

sql - 在 SQL Server 查询中将 NULL 替换为 0

php - 选择语句无法正常工作

algorithm - 带有互斥元素的背包

algorithm - 拥有/想要列表匹配算法

mysql - 需要 count 返回 0 但没有空结果

mysql - SQL将空值之和转换为0