SQL选择n个随机组并返回所有记录

SQL选择n个随机组并返回所有记录,sql,postgresql,random,Sql,Postgresql,Random,我似乎无法找到这个确切问题的解决方案,如果不通过熊猫操作将两个或多个查询链接在一起。(我以前曾尝试在postgresql中以cur.execute(“从数据中选择不同的组,其中random()

我似乎无法找到这个确切问题的解决方案,如果不通过熊猫操作将两个或多个查询链接在一起。(我以前曾尝试在postgresql中以
cur.execute(“从数据中选择不同的组,其中random()<{0}.format(rand_coef))
的方式进行随机采样,但我无法将结果数组合并到单个查询中,也无法指定确切的n值。)

假设的数据集和查询如下所示:

假设我想从以下数据中得到n=3个随机组

id, group, value
1,a,23
1,a,3
1,b,2
1,a,432
1,b,123
1,d,23
1,d,11
1,c,23
1,c,234
1,a,223
1,c,32
查询的示例结果为n=3个随机组(即b、c、d):

这是如何工作的?

一种方法是:

select t.*
from t join
     (select group
      from t
      group by group
      order by random()
      limit 3
     ) g
    on t.group = g.group;
请注意,
group
对于列来说是一个非常糟糕的名称,因为它是SQL关键字。

一种方法是:

select t.*
from t join
     (select group
      from t
      group by group
      order by random()
      limit 3
     ) g
    on t.group = g.group;

请注意,
group
对于列来说是一个非常糟糕的名称,因为它是一个SQL关键字。

您能解释一下当前的解决方案以及为什么两个或多个查询对您不起作用吗?我以前曾尝试在postgresql中以
cur.execute(“从数据中选择不同的组,随机()<{0}”)的方式进行随机抽样(rand_coef))
,但我无法将生成的数组合并到一个查询中,也无法指定确切的n值。您能否解释当前的解决方案以及为什么两个或多个查询不适用于您?我以前曾尝试在postgresql中以
cur.execute(“从数据中选择不同的组,其中随机()<{0}.format(rand_coef))
,但我无法将结果数组合并到一个查询中,也无法指定确切的n值。我同意您发布的所有内容,但子查询是否否定了OP的要求:“如果不将两个或多个查询链接在一起,我似乎无法找到这个确切答案的解决方案。”??
group
只是一个示例列名,但我很欣赏这个提示。我同意您发布的所有内容,但子查询是否否定了OP的要求:“如果不将两个或多个查询链接在一起,我似乎无法找到准确答案的解决方案。”??
group
只是一个示例列名,但我很欣赏这个提示。