我有以下情况。我有一些员工的工作百分比为每个。每次有工作到来时,我需要根据工作百分比将其分配给某个员工,例如:
Employee 1 Job Percentage
James 75%
Adam 15%
Cindy 10%因此,当有工作可用时,必须有75%的时间分配给James,15%的时间分配给Adam,10%的时间分配给Cindy。这些数据存储在MySQL数据库中。
如果只有2名员工,这将很容易解决,因为我可以获得1到100之间的随机数字(兰特1,100),并查看它是否在某个员工百分比的范围内,并相应地分配工作。这里的问题是,员工数量可以更改,并且可以添加和删除员工。有没有人能给出一个解决方案?欢迎任何想法。
发布于 2015-06-11 20:00:22
您需要的是累积百分比。然后你就可以使用rand()了。所以:
select a.*
from (select a.*,
(@cume := @cume + percentage) as cume
from allocations a cross join
(select @cume := 0)
) a cross join
(select rand() as r) r
where r.r between cume - percentage and cume
limit 1;我们的想法是获得如下范围:
0% 75%
75% 90%
90% 100%将rand()放入子查询的目的是只获取一行。因为查询使用between,所以每运行几亿次可能会有一个副本,所以我添加了limit 1。它使用between,以防rand()返回0或1。
https://stackoverflow.com/questions/30780007
复制相似问题