私は、米国の地域全体に均一に分布している境界のあるランダムなユーザー サンプルを取得する必要があります。
ユーザーに関する郵便番号情報があることを考えると、次のアプローチが Oracle 11g で私の目標を達成するのに妥当かどうか疑問に思っています。
私のアプローチは、郵便番号を使用して、米国全体の地理的分布を実現することです。
選択した郵便番号が全米で均一に配布されるようにするには: - 「ゾーン」(最初の 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
;
アップデート:
さらに調査を重ねた結果、このアプローチでは、米国全体に「均一に」分散された一連の情報を取得するという目標を達成できないことがわかりました。郵便番号ゾーンが「大きい」人口集中地の近くで「小さい」ため、結果は依然として偏っています。したがって、これらの小さなゾーンでユーザーを取得する可能性は、より大きなゾーンよりも大きくなり、ユーザーは人口密集地の近くに集まります。