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

SQL - How to randomly choose an ordered subset?

我有一个 table 大致是这样的:

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

我想从这个 table 中选择一个大小约为 N 的随机子集。 N 条目应属于 group 的子集,无论哪个 group,无论组大小如何,它们都应在组级别随机排序。例如,对于 N==3,我想要

[ooo, iii, eee](即来自 group2 的条目,然后是 group3)或

[eee, iii, ooo](即来自 group3 的条目,然后是 group2)或

[ttt, nnn, qqq](即来自组 4 的条目)或

[qqq, nnn, ttt](即来自组 4 的条目)或

[eee, ggg, bbb, aaa](即来自 group3 的条目,然后是 group1)或

...

我可以不选择组 "completely"。

我不经常这样做,我更喜欢多个查询而不是一个复杂的查询。 N 将在 100 左右,table 有 <10k 个条目,程序 运行 每天一次。 N不需要精确匹配。我在 Python/Mysqldb 中这样做,但我对一般 algorithm/approach.

很感兴趣

此外,一旦处理了 N 个条目,我想在下一个 运行 中忽略它们,方法是简单地删除它们或设置一些附加属性。在后一种情况下,需要调整查询。

编辑: 已更改以作澄清。

我不知道这是否是最佳解决方案,但至少它是一个解决方案。不幸的是,MySQL 不允许在子查询中使用 LIMIT,因此我使用了变量。

SELECT组 从我的表 按组分组 有计数(唯一)= 3 按 rand() 排序 限制 1 INTO @randomgroup;

SELECT独一无二 从我的表 WHERE 组 = @randomgroup 按唯一顺序排序;