我有以下情况。我有一些员工,每个人都有工作比例。每次工作到来时,我都需要根据工作百分比将其分配给某个员工,例如:
Employee 1 Job Percentage
James 75%
Adam 15%
Cindy 10%
因此,当一份工作可用时,必须在75%的时间内分配给James,Adam 15%和Cindy 10%。它们存储在MySQL数据库中。
如果只有2名员工,这很容易解决,因为我可以从1到100(兰特1,100)得到一个随机数,看看它是否在一个员工百分比的范围内并分配相应的工作。这里的问题是员工数量可以改变,员工可以添加和删除。有谁能建议解决这个问题?欢迎任何想法。
答案 0 :(得分:0)
您需要的是累积百分比。然后你可以使用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。