2013-07-11 46 views
2

我有一些用户的信息,性别,出生日期,“类别”的表格,等如何采取随机抽样的MySQL数据库与多个条件

我需要采取随机抽样,但有以下结果:25-35
40%年龄为36-40之间
10%年龄之间41-60

之间

75%女性
25%男性

50%年龄

总计2000记录。

有没有办法直接在MySQL中做到这一点?

+0

没什么......我不知道......我的意思..我可以做一个随机选择限制到2000年的记录,有一些基本的规则,但我怎么能确保年龄的50%之间25-35有一些女人和一些男人? – user2572393

+4

你实际上不能保证“25-35岁之间的50%有一些女性和一些男性”,因为这不会是一个真正的随机样本。这将是有选择的。例如如果我把每一个第三人记录在一条线上,他们可能都是男人,但是那里有女人。 你可能会更好地把它作为一个部分,如下所示: 750名25-35岁的男性; 250名女性25-35岁;等 – TomDunning

+0

看起来你必须去工会 –

回答

1

对于每个sql查询,您不能使用联合声明中的顺序或限制。它们可以在最后使用。

所以它更好地使用存储过程的输出。

CREATE PROCEDURE USER_DATA_RAND() 
BEGIN 
CREATE TEMPORARY TABLE USER_TMP 
ID INT, 
DATE_OF_BIRTH DATE, 
CATEGORY STRING, 
AGE INT) 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 25 and 35 and sex = 'male' order by rand() limit 2000*0.5*0.25) ; 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 25 and 35 and sex = 'female' order by rand() limit 2000*0.5*0.75) ; 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 36 and 40 and sex = 'male' order by rand() limit 2000*0.40*0.25) ; 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 36 and 40 and sex = 'female' order by rand() limit 2000*0.40*0.75) ; 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 41 and 60 and sex = 'male' order by rand() limit 2000*0.10*0.25) ; 
INSERT INTO USER_TMP 
select sex, date_of_birth, `category`,age from users where age between 41 and 60 and sex = 'female' order by rand() limit 2000*0.10*0.75) ; 

SELECT * FROM USER_TMP; 
END