如何根据分配给每一行的概率机会从数据库中随机选择一行。
- 示例:*
Make Chance Value
ALFA ROMEO 0.0024 20000
AUDI 0.0338 35000
BMW 0.0376 40000
CHEVROLET 0.0087 15000
CITROEN 0.016 15000
........
我如何选择随机生成名称和它的值的基础上,它必须被选中的概率。rand()
和ORDER BY
的组合是否有效?如果是这样,最好的方法是什么?
2条答案
按热度按时间mwyxok5s1#
我有同样的需求,并试图为SQL服务器编写一个查询。我的答案是基于@gordon-linoff的使用概率累积和的查询。
我已经写了一个完整的摘要来测试https://github.com/AlahmadiQ8/cumulative-probability-sql
这里是累积和概率的直观解释
| 项目|机率|累积的|
| - -----|- -----|- -----|
| 一个|0.2| 0.2|
| B| 0.3| 0.5|
| C类|0.5|一个|
如果是随机数
x = 0.45
,那么我们应该返回B
,因为x
是0.2 < x <= 0.5
。gxwragnw2#
您可以通过使用
rand()
然后使用累积和来实现这一点。假设它们加起来是100%:注意事项:
rand()
在子查询中调用一次以初始化变量。不希望多次调用rand()
。limit 1
任意选择1。cumep > @r
时停止子查询,则可以提高效率。