如何;下面,假定您提供一個行數(「LMT」),並浮在M/F分佈:
create table gen (
id integer,
gender text,
name text
);
-- inserts 75% males and 25% females into the source table ("gen")
insert into gen select n, case when mod(n,5) = 0 then 'F' else 'M' end, (case when mod(n,5) = 0 then 'F' else 'M' end)||'_'||n::text
from generate_series(1,20000) n
-- extract 80/20 M vs F
with conf as (select 1000 as lmt, .80::FLOAT as mpct, .20::FLOAT as fpct),
g as (select id,gender,name,row_number() over (partition by gender order by gender) rn from gen)
select *
from g
where (gender = 'M' and rn <= (select lmt*mpct from conf))
or (gender = 'F' and rn <= (select lmt*fpct from conf));
-- Same query, to show the percent M vs F:
with conf as (select 1000 as lmt, .80::FLOAT as mpct, .20::FLOAT as fpct),
g as (select id,gender,name,row_number() over (partition by gender order by gender) rn from gen)
select gender,count(*)
from (
select *
from g
where (gender = 'M' and rn <= (select lmt*mpct from conf))
or (gender = 'F' and rn <= (select lmt*fpct from conf))
) y
group by gender
來源
2013-08-20 02:10:47
bma
對於情景2,應該發生什麼? –
我編輯了我的答案以更好地解釋我自己。 –
不幸的是,我不知道足夠的SQL來給出答案的代碼,但我可以給出的邏輯: 我建議一個SP,並有一個值,N(你選擇的數字),並採取n * .8並選擇性別爲M的行,將返回的行計爲numResultsMale,然後選擇性別爲F的N-(numResultsMale)。 –