我正在努力为下面的问题找到一个最佳的解决方案。假设我有一张这样的table:
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个随机记录-这个查询会有点大。
提前多谢了
3条答案
按热度按时间5ktev3wc1#
sqlfiddle演示
vuv7lop32#
这在mysql中不起作用,但在psql中可以使用
partition by
```select name,report_id from
(select name,report_id,row_number()
over
(partition by name order by random())
as rn from Table) a
where rn<=10
9cbw7uwe3#
试试这个:
sql fiddle演示