我正在尝试根据指定的参数选择随机数量的条目。
喜欢如果我有桌子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);
等。
这可能吗?我想不出逻辑。我能想到的最好的方法是一次检索一行并继续计数,但效率低下。
(注意:如果计数超过no,则可以接受但不是相反)
答案 0 :(得分: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。我肯定它可以进行优化,但我很想知道如何创建它。