我正在努力为以下问题找到最佳解决方案。
假设我有一个这样的表“表”:
id name report_id
1 name1 1
2 name2 3
3 name3 5
4 name1 7
5 name3 8
....................
我想为集合中的每个值选择:('name1', 'name2') 10 个随机的唯一行。
当然可以用 union 来做,比如:
(SELECT * FROM Table
WHERE
name='name1'
ORDER BY RAND() LIMIT 10)
UNION
(SELECT * FROM Table
WHERE
name='name2'
ORDER BY RAND() LIMIT 10)
但如果我有 100 个唯一名称,我必须为其选择 10 个随机记录 - 这个查询会有点大。
最佳答案
select ID,NAME,REPORT_ID
from
(
select *, @row:=if(name=@name,@row,0)+1 as rn, @name:=name from
(select *,RAND() as trand from t) t1,
(select @row:=0,@name:='') tm2
order by name,trand
) t2
where rn<=10
关于mysql - 每个指定组选择 n 个随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14854386/