2013-07-11 69 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