我在这里搜索了一段时间,但结果让我感到困惑,因为我是MySQL的新手。
我有一个包含以下4列的表:AUTO_INCREMENT ID, NAME, TYPE, CHANCE,所以行看起来像这样:
1, NOTHING, NO, 35
1, VERSICOLOR, TREE, 35
3, DIVERSIPES, TREE, 35
4, AMAZONICA, TREE, 35
5, EMILIA, GROUND, 25
6, BOEHMI, GROUND, 25
7, SMITHI, GROUND, 25
8, METALLICA, SKY, 5
9, REGALIS, SKY, 5注意:这些都是简单的例子,将会有类似的x100。我需要做的是从该表中选择一行,其中包含CHANCE列中显示的机会。
我需要从其中的9个中选择一行,结果可以是"VERSICOLOR,DIVERSIPES,AMAZONICA或NOTHING与35%的机会“或”艾米莉亚,BOEHMI或史密斯与25%的机会“或”金属或帝王与%5的机会“。因此,这个查询可能会给出"VERSICOLOR,DIVERSIPES,AMAZONICA or NOTHING“的结果,因为它有35%的机会,或者我很幸运,我会得到"METALLICA or REGALIS”:)
基本上有3组类型,地面,树和天空。我想要做的是从所有这些中只得到一个结果。地面,树或天空类型的项目有一定的机会,但可以肯定的是,我不想为每个组一个,我只想要一个结果,它可以是地面,树或天空类型的项目。我希望我已经解释清楚了。致以问候。
发布于 2014-03-21 00:39:22
可能有一个更优雅的解决方案,它不会假设你的百分比加到100 --但这可能是可行的:
示例http://sqlfiddle.com/#!2/ec699/1
SELECT *
FROM (
SELECT id, name, type, chance
, @value + 1 AS lowval
, @value := @value + chance AS hival
FROM tbl
JOIN (SELECT @value := 0) AS foo) AS bar
JOIN (SELECT FLOOR(1 + RAND()*99) AS guesser) AS bar2
ON guesser BETWEEN lowval and hival;发布于 2014-03-21 02:26:12
这个问题出现在SQL之外。我在这里发布了一个通用的解决方案,generate random numbers within a range with different probabilities。
用你使用的第一组数字(70%,25%,5%)填满三个骨灰盒,每个罐子里有100个球。所有的球都是红色的。其中75个球是绿色的25个球是红色的。最后,骨灰盒2将有15个蓝球和85个红球。现在随机挑选一个骨灰盒,每个骨灰盒的概率为1/3,然后随机挑选一个球。使用该方案,获得红球的概率为0.75,获得绿球的概率为0.25,获得蓝球的概率为0.05。
https://stackoverflow.com/questions/22539031
复制相似问题