SQL - 如何随机选择有序子集?

时间:2015-03-16 07:47:58

标签: python mysql sql random

我有一张大致如此的表:

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属性。在后一种情况下,需要调整查询。

编辑:已更改以澄清。

1 个答案:

答案 0 :(得分:0)

我不知道,如果这是最好的解决方案,但至少它是一个解决方案。不幸的是,MySQL在子查询中不允许使用LIMIT,所以我使用了变量。

SELECT组 来自mytable GROUP BY组 计数(唯一)= 3 ORDER BY rand() 限制1 INTO @randomgroup;

SELECT唯一 来自mytable WHERE group = @randomgroup ORDER BY唯一;