这是获得有限的随机结果的最佳方法,均匀分布在列值上吗?

时间:2013-06-11 15:24:09

标签: oracle random zipcode uniform

我需要采用在美国地理位置均匀分布的有界随机用户样本。

我想知道以下方法是否合理,以实现我在Oracle 11g中的目标,因为我有关于用户的邮政编码信息。

我的方法是使用邮政编码来完成整个美国的地理分布。

确保所选邮政编码在美国各地均匀分布: - 我正在使用“区域”(前两位数字)。

要在邮政编码区域内获得随机分布:

  1. 对于每个邮政编码,我指定一个随机数。
  2. 然后我按照随机数对邮政编码区域组进行排序 选择前N个(以下示例中为10)。
  3. 最后,(不包括在下面)我会从每个邮政编码中检索一组随机用户。

    select
      y.ZIP_CODE
    from
      (
      select
        x.ZIP_CODE
       ,x.ZIP_CODE_ZONE
       ,row_number()
        over (
          partition by x.ZIP_CODE_ZONE
          order by x.random_num
        )
         AS row_number
      from
        (
        select 
          ZIP_CODE
         ,ZIP_CODE_ZONE
         ,dbms_random.value(0,100000) as random_num
        from
          ZIP_CODE_TABLE
        where 1=1
          and COUNTRY_CODE = 'US'
        ) x
      ) y
    where
      y.row_number <= 10
    order by 
      y.zip_code
     ,y.row_number
    ;
    

    更新

    经过更多的研究,我发现这种方法无法实现在美国获得“统一”分布式信息集的目标。结果仍有偏见,因为邮政编码区在“大”人口中心附近“小”。因此,在这些小区域中检索用户的机会大于较大区域,因此用户聚集在人口中心附近。

2 个答案:

答案 0 :(得分:1)

以未分类的方式检索数据库中的数据。如果缓冲区缓存中已有一些数据,则可以得到相同的结果。

select y.ZIP_CODE
from
(
    select 
          ZIP_CODE
        , ZIP_CODE_ZONE
        , row_number() over (partition by ZIP_CODE_ZONE order by dbms_random.value(0,100000)) AS row_number
    from  ZIP_CODE_TABLE
    where COUNTRY_CODE = 'US'
) y
where y.row_number <= 10
order by 
      y.zip_code
    , y.row_number
;

答案 1 :(得分:0)

怎么样

  

从ZIP_CODE_TABLE SAMPLE(0.1)中选择ZIP_CODE;