2012-12-09 74 views
0

我想根據指定的參數選擇一個隨機數的條目。SQL查詢獲取條目數

一樣,如果我有一個表T

T(id, data1, data2 ,no); 

現在沒有與隨機一堆數字的領域。

我想要得到T的一個隨機子集,使得no的數量處於特定值。

例如可以說,我想總沒有= 7

T(0,a,a,4); 
T(1,B,B,4); 
T(2,v,v,1); 
T(3,d,d,2); 
T(4,d,d,3); 

查詢的所述查詢的輸出將是要麼

T(0,a,a,4); 
T(4,d,d,3); 

OR

T(1,B,B,4); 
T(2,v,v,1); 
T(3,d,d,2); 

Is thi可能嗎?我想不起一個邏輯。我能想到的最好的辦法是一次檢索一行,並繼續計數,但效率不高。

(注:如果計數超過沒有它是可以接受的,但不是周圍的其他方式)

回答

1

這將讓你非常接近。

create table t (name varchar(1), num tinyint) ; 

insert into t (name, num) values ('a', 4), ('b', 2), ('c', 3), 
    ('d',1), ('e', 4), ('f', 1),('g', 6); 

這裏的查詢:

select * from 
    (select name, num, @cum := @cum + num as cumulate from 
    (select * from t order by rand()) as t3, 
    (select @cum := 0) as t1 
) as t2 
where cumulate <= 7; 

這裏有一個fiddle。 Im sure它可以優化,但我很好奇,看看如何創建它。

+0

足夠接近:-) – cjds