我试着在特定条件下从t表中获得一个包含4个数据的随机数据集。
我试着选择4个条件如下的数据
中必须有2个“y”和2个“c”数据 f4
从数据集t表中随机选择(可以 Y-Y-C-C
或者 C-Y-Y-C
或者 C-C-Y-Y
等)
数据集distinct只能有一个唯一的数据 f2
在那4个数据里。
所以可以 A-C-F-H
或者 A-D-I-H
或者 J-H-E-C
等。
到目前为止,我做了这个,但是我不能得到4个数据的2'c'和2'y'。
sql小提琴
mysql 5.6架构设置:
create table t ( id int, f2 char, f3 char, f4 char );
insert into t values
(1 ,'a' ,'q' ,'C'),
(2 ,'a' ,'w' ,'Y'),
(3 ,'b' ,'e' ,'C'),
(4 ,'b' ,'r' ,'Y'),
(5 ,'c' ,'t' ,'C'),
(6 ,'c' ,'y' ,'Y'),
(7 ,'d' ,'u' ,'C'),
(8 ,'d' ,'o' ,'Y'),
(9 ,'e' ,'m' ,'C'),
(10 ,'e' ,'n' ,'Y');
查询1:
select f2, f3, f4
from (
select f2, f3, f4
from (
select f2, f4, f3 from
( select f2, f4, f3
from t
order by rand()
) t0
group by f2
) t1
order by RAND()
) t2 order by rand()
LIMIT 4
结果:
| f2 | f3 | f4 |
|----|----|----|
| b | r | Y |
| e | n | Y |
| d | o | Y |
| a | w | Y |
我所期望的是;
| f2 | f3 | f4 |
|----|----|----|
| b | r | Y |
| e | n | C |
| d | o | C |
| a | w | Y |
2条答案
按热度按时间x6492ojm1#
使用
UNION
得到两个Y
还有两个C
:但我不知道如何防止这些复制
f2
两个子查询之间的值。jckbn6z72#
暴力方法:
演示:http://rextester.com/vnf93190
此查询将返回所有可能的行id组合。在子查询中选择一个随机组合,并再次将其与表联接以获得相应的行:
演示:http://rextester.com/gqcco60910