Как сделать стратифицированную случайную выборку в Redshift? - PullRequest
0 голосов
/ 12 января 2019

Мне нужно взять случайную выборку клиентов, которые покупали из разных категорий. Есть 8 категорий, и заказы распределены среди них.

Если бы я хотел взять случайную выборку клиентов, которые совершили покупку, но сохранили пропорцию заказов в каждой категории, как бы я настроил это в своем коде sql?

Ниже приведена таблица с указанием этого (в нее не входят данные о клиентах - я хочу, чтобы мой список клиентов основывался на репрезентативной пропорции заказов):

таблицу, которую я использую, можно найти здесь: https://imgur.com/a/Q0lMHWf

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Попробуйте PERCENT_RANK в случайном порядке, чтобы получить n% выборок:

select *
from
 (
   select t.*
      ,percent_rank()
       over (partition by category
             order by rand()) as pr
   from tab
 ) as dt
where pr <= 0.1 -- similar to 10% sample
0 голосов
/ 12 января 2019

Как правило, вы будете использовать row_number(), order by и выбирать n-е значения. Итак, для примерно 1% стратифицированного образца выполните:

select t.*
from (select t.*,
             row_number() over (order by category, rand()) as seqnum
      from t
     ) t
where mod(seqnum, 101) = 1
order by category;

Основная идея заключается в том, что вы можете получить стратифицированную выборку, упорядочив набор результатов по категориям и выполнив n-ю выборку результата.

...