根据SQL中的分数列采样吗?

问题描述 投票:0回答:1

我正在尝试根据用户定义的概率分布在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进行了采样?

sql random sample
1个回答
0
投票

在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,并在其中添加额外的列并添加随机过滤器,然后对其进行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.