0

我正在尝试根据指定的参数选择随机数量的条目。

就像如果我有一张桌子

T( id, data1, data2 ,no);

现在 no 是一个包含随机数字的字段。

我想获得 T 的一个随机子集,使得 no 的数量处于特定值。

例如,假设我想要总 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);

或者

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

等等

这可能吗?我想不出一个逻辑。我能想到的最好的方法是一次检索一行并继续计数,但这是低效的。

(注意:如果计数超过 no 这是可以接受的,但反之则不行)

4

1 回答 1

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;

这是一个小提琴。我确定它可以优化,但我很想知道如何创建它。

于 2013-11-16T17:56:14.363 回答