Oracle выбирает случайные сегменты - PullRequest
0 голосов
/ 22 ноября 2018

Я хотел бы выбрать следующий сегмент.

Random 5500 rows including the following segments:
       Subcategorie (sex): - 3300 men
                           - 2200 women
              Subcategorie (age): - 2140 between 18-34 years
                                  - 2100 between 35-54 years
                                  - 1260 between 55-99 years

Как я могу решить это в операторе выбора?

1 Ответ

0 голосов
/ 22 ноября 2018

Проблема в том, что вы используете слово «случайный», но у вас очень точное распределение когорт по возрасту и полу.По-настоящему случайный одиночный запрос не даст таких точных квот.Поэтому ваш запрос обязательно должен быть сложным: вам нужно разделить всю таблицу на подмножества, которые соответствуют вашим ограничениям, а затем случайным образом выбрать из этих подмножеств.Примерно так ...

select * from (
   select * from whatever
   where sex = 'M'
   and age between 18 and 34
   order by dbms_random.value 
)
where rownum <= 1284
union all
select * from (
   select * from whatever
   where sex = 'M'
   and age between 35 and 54
   order by dbms_random.value 
)
where rownum <= 1260
union all    select * from (
   select * from whatever
   where sex = 'M'
   and age between 55 and 99
   order by dbms_random.value 
)
where rownum <= 756
union all
select * from (
   select * from whatever
   where sex = 'F'
   and age between 18 and 34
   order by dbms_random.value 
)
where rownum <= 856
union all
select * from (
   select * from whatever
   where sex = 'F'
   and age between 35 and 54
   order by dbms_random.value 
)
where rownum <= 840
union all    select * from (
   select * from whatever
   where sex = 'F'
   and age between 55 and 99
   order by dbms_random.value 
)
where rownum <= 504

Это может плохо работать, в зависимости от обычных факторов - размера таблицы, индексации и т. Д. - но это даст именно эти когорты.

В случае, если это не очевидно, границы rownum - это число посещений в каждой возрастной группе, умноженное на соотношение мужчин и женщин (3: 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...