我试图从Mysql上的表中选择4个不同的随机数据,但我想要一些独特的字段,例如;
我有一张桌子
表名'视频'而数据是;
id f2 f3 f4
-- -- -- --
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
我想从f3中随机选择4个数据,但f2必须是唯一的。每个f2的f4必须是唯一的,我的意思是我必须随机获取f' u'或者' o' o不是都。所以最后我想从唯一的f2获得2xC数据列,从唯一的f2获得2xY数据。我想得到的结果就像;
f3 f3 f3
-- -- --
q or| q or| w
r or| e or| r
t or| y or| t
o or| o or| u
这是我在MsSql中创建但不能将其转换为Mysql的示例;
select e.* from (
select top 4 f2,
ROW_NUMBER() OVER (ORDER BY newId()) AS RowNumber
from (
select distinct(f2) from videos
) x
) a inner join (
select top 4 ones.n,
ROW_NUMBER() OVER (ORDER BY newId()) AS RowNumber
FROM (VALUES('C'),('Y'),('C'),('Y')) ones(n)
) b on a.RowNumber = b.RowNumber
inner join videos e on a.f2 = e.f2 and b.n =e.f4
答案 0 :(得分:0)
如何对随机数据进行排序,然后使用mysql ONLY_FULL_GROUP_BY
默认行为(禁用):
这会导致MySQL接受前面的查询。在这种情况下,服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的,这可能不是您想要的。此外,添加ORDER BY子句不会影响每个组中值的选择。
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');
查询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
group by f2, f4
<强> Results 强>:
| f2 | f3 | f4 |
|----|----|----|
| a | w | Y |
| b | r | Y |
| c | t | C |
| d | o | Y |