我有一张大致如此的表:
id | unique | group
----------------------------------
1 | aaa | group1
2 | bbb | group1
3 | ggg | group1
4 | iii | group2
5 | ooo | group2
6 | eee | group3
7 | ttt | group4
8 | qqq | group4
9 | nnn | group4
我想从此表中选择大致N
的大致随机子集。 N
条目应属于group
的子集,无论哪个group
,无论组大小如何,它们都应在组级别上随机排序。例如,对于N==3
,我想要
[ooo, iii, eee]
(即来自group2,然后是group3的条目)或
[eee, iii, ooo]
(即来自group3,然后是group2的条目)或
[ttt, nnn, qqq]
(即来自group4的条目)或
[qqq, nnn, ttt]
(即来自group4的条目)或
[eee, ggg, bbb, aaa]
(即来自group3,然后是group1的条目)或
...
没有一个团队我完全没有#34;完全"地选择。
我不经常这样做,我更喜欢对一个复合体进行多次查询。 N
左右100
左右,表格中包含< 10k条目,程序每天运行一次。 N
不需要精确匹配。我在Python / Mysqldb中这样做,但我对通用算法/方法很感兴趣。
此外,一旦N
条目被处理,我想在下次运行时忽略它们,或者通过简单地删除它们或者通过设置一些additonal属性。在后一种情况下,需要调整查询。
编辑:已更改以澄清。
答案 0 :(得分:0)
我不知道,如果这是最好的解决方案,但至少它是一个解决方案。不幸的是,MySQL在子查询中不允许使用LIMIT,所以我使用了变量。
SELECT组 来自mytable GROUP BY组 计数(唯一)= 3 ORDER BY rand() 限制1 INTO @randomgroup;
SELECT唯一 来自mytable WHERE group = @randomgroup ORDER BY唯一;