2

我需要获取在美国地理范围内均匀分布的有界随机用户样本。

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

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

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

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

  1. 对于每个邮政编码,我分配一个随机数。
  2. 然后,我按随机数对邮政编码区组进行排序,并选择前 N 个(以下示例中为 10 个)。

最后,(不包括在下面)我将从每个邮政编码中检索一组随机用户。

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
;

更新:

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

4

2 回答 2

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
;
于 2013-06-11T15:50:00.143 回答
0

怎么样

从 ZIP_CODE_TABLE SAMPLE (0.1) 中选择 ZIP_CODE;

于 2013-06-11T15:37:59.757 回答