给定一个项目表,每个项目的评分都在 0 到 100 之间。为了相对于彼此更“均匀”地分配值,我需要研究什么术语或方法?我意识到我正在寻求增加标准偏差值。
我相信这一定是评级系统的一个普遍问题。数据库中约 90% 的项目集中在相似的“评级”周围,使得该值的意义不大。理想情况下,我想要一个解决方案,其中给定项目的评级在某种程度上相对于表中的所有其他项目。
最终,我希望直接在 SQL (MySQL) 中或在必要时使用 PHP 来实现这一点。
下面的例子...
id | rating
01 | 98
02 | 92
03 | 85
04 | 80
05 | 75
06 | 71
07 | 69
08 | 66
09 | 64
10 | 62 //Data starts to 'cluster' around here
11 | 61
12 | 61
13 | 61
14 | 60
15 | 59
16 | 58
17 | 56
18 | 53
19 | 50
20 | 45
21 | 38
22 | 30
23 | 20
24 | 5
最佳答案
这可以在 MySQL 中完成,但需要一些计算。首先,您需要平均数和标准差。两者都是 MySQL 函数。那么,与均值相差多少标准差才算一个有效值?我假设它是 2,因为这很常见。现在,Mean-(2*StdDev) 是最小值,Mean+(2*StdDev) 是最大值。假设您编写了一个查询(请注意,这些天我 100% 的时间都在使用 Oracle,因此我的语法可能有点像 Oracle):
select avg(value)-2*stddev(value) minval,
avg(value)+2*stddev(value) maxval
from mytable
您可以使它成为一个子查询并加入它。然后,您可以计算 min 和 max val 之间的百分比:
select (value-mival)/(maxval-minval) pctval
from mytable
join (
select avg(value)-2*stddev(value) minval,
avg(value)+2*stddev(value) maxval
from mytable
)
结果将是从 minval 到 maxval 的百分比。您可以将其乘以 100 以获得 0 到 100 的值(异常值将有 <0 和 >100 的值)。
关于php - 分发评分数据以增加标准偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29302930/