我正在尝试自动生成大量测试数据,我正在努力了解如何生成一组所需的随机值。
我需要创建一组在不同范围内出现的随机值。根据测试用例,结果值的总和必须大于或低于预定值。
例如,
Value | Minimum value | Maximum Value
A | 100 | 300
B | 200 | 500
C | 300 | 600
D | 100 | 300
如果值的总和必须大于800,则有效的解决方案将是
A = 200
B = 400
C = 500
D = 100
如果值的总和必须小于800,则有效的解决方案将是
A = 100
B = 200
C = 300
D = 100
这个问题只能通过优化功能解决吗?有没有其他方法来计算ABCD的值?
我希望使用SQL解决这个问题,但也有兴趣听一下伪代码方法。
答案 0 :(得分:2)
尝试再试一次,直到得到你想要的东西。
declare @T table (Value char(1), MinValue int, MaxValue int)
insert into @T values('A', 100, 300)
insert into @T values('B', 200, 500)
insert into @T values('C', 300, 600)
insert into @T values('D', 100, 300)
declare @R table (Value char(1), Rnd int)
declare @Sum int
while 0=0
begin
delete @R
insert into @R
select Value, round(((MaxValue - MinValue -1) * rand() + MinValue), 0) as Rnd
from @T
select @Sum = sum(Rnd) from @R
if @Sum > 800
break
end
select *, @Sum
from @R
答案 1 :(得分:0)
生成4个随机数,A,B,C,D。
求和,= E
按E /期望总数对A,B,C,D进行比例。