Oracle random segments select
up vote
0
down vote
favorite
I would like to select the following segment.
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
How could I solve this in a select statement?
sql oracle select analytics
add a comment |
up vote
0
down vote
favorite
I would like to select the following segment.
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
How could I solve this in a select statement?
sql oracle select analytics
2
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I would like to select the following segment.
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
How could I solve this in a select statement?
sql oracle select analytics
I would like to select the following segment.
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
How could I solve this in a select statement?
sql oracle select analytics
sql oracle select analytics
edited Nov 22 at 17:37
APC
117k15115229
117k15115229
asked Nov 22 at 15:20
Dávid Mészáros
6
6
2
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25
add a comment |
2
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25
2
2
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
The problem is, you use the word "random" but you have a very precise break down of cohorts by age and sex. A truly random single query won't produce such exact quotas. So your query must necessarily be complicated: you need to divide the whole table into subsets which meet your constraints then randomly select from those subsets. Something like this...
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
This may perform poorly, depending on the usual factors - size of table, indexing, etc - but it will produce those exact cohorts.
In case it's not obvious, the rownum
bounds are the number of hits in each age group multiplied by the ratio of men to women (3:2).
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
The problem is, you use the word "random" but you have a very precise break down of cohorts by age and sex. A truly random single query won't produce such exact quotas. So your query must necessarily be complicated: you need to divide the whole table into subsets which meet your constraints then randomly select from those subsets. Something like this...
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
This may perform poorly, depending on the usual factors - size of table, indexing, etc - but it will produce those exact cohorts.
In case it's not obvious, the rownum
bounds are the number of hits in each age group multiplied by the ratio of men to women (3:2).
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
add a comment |
up vote
2
down vote
The problem is, you use the word "random" but you have a very precise break down of cohorts by age and sex. A truly random single query won't produce such exact quotas. So your query must necessarily be complicated: you need to divide the whole table into subsets which meet your constraints then randomly select from those subsets. Something like this...
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
This may perform poorly, depending on the usual factors - size of table, indexing, etc - but it will produce those exact cohorts.
In case it's not obvious, the rownum
bounds are the number of hits in each age group multiplied by the ratio of men to women (3:2).
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
add a comment |
up vote
2
down vote
up vote
2
down vote
The problem is, you use the word "random" but you have a very precise break down of cohorts by age and sex. A truly random single query won't produce such exact quotas. So your query must necessarily be complicated: you need to divide the whole table into subsets which meet your constraints then randomly select from those subsets. Something like this...
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
This may perform poorly, depending on the usual factors - size of table, indexing, etc - but it will produce those exact cohorts.
In case it's not obvious, the rownum
bounds are the number of hits in each age group multiplied by the ratio of men to women (3:2).
The problem is, you use the word "random" but you have a very precise break down of cohorts by age and sex. A truly random single query won't produce such exact quotas. So your query must necessarily be complicated: you need to divide the whole table into subsets which meet your constraints then randomly select from those subsets. Something like this...
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
This may perform poorly, depending on the usual factors - size of table, indexing, etc - but it will produce those exact cohorts.
In case it's not obvious, the rownum
bounds are the number of hits in each age group multiplied by the ratio of men to women (3:2).
edited Nov 27 at 10:11
answered Nov 22 at 17:46
APC
117k15115229
117k15115229
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
add a comment |
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I used the word "random", because there are 2 million people in the table and I would select randomly the following segments. It will be a selection for marketing.
– Dávid Mészáros
Nov 27 at 9:24
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
Yes, I understand the question. I was trying to point that you can't produce such a precise outcome from a single truly random query.
– APC
Nov 27 at 10:13
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53434013%2foracle-random-segments-select%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
I think you need more explanation. How do you return a fractional number of men, for example?
– Gordon Linoff
Nov 22 at 15:25