我正在尝试根据用户定义的概率分布在SQL中随机抽样一个表。我有:
-------------------------------------------
id | bucket | bucket_prob | other_feature |
-------------------------------------------
1 a 0.01 abc
1 a 0.01 def
2 b 0.03 ghi
3 c 0.04 jkl
3 c 0.04 mno
3 c 0.04 pqr
是否存在我可以编写的SQL查询,使得结果将是一个表,其中已根据bucket_prob列对ID进行了采样?
在PostgreSQL和许多其他SQL数据库中,您可以像这样简单地随机选择10行:
select
*
from
(select
stuff
from
mytable
order by
random()) q
limit 10
我认为您可以将random() function放在where子句中,以过滤出行:
select
*
from
(select
stuff
from
mytable
where
bucket_prob + random() > 1
order by
random()) q
limit 10
[random()
返回0到1之间的随机值。bucket_prob列越大,总和大于1的可能性就越大。
**注意,如果您的数据库不允许where子句中的函数,则可以创建一个临时表或CTE,并在其中添加额外的列并添加随机过滤器,然后对其进行过滤。