Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从postgres中的n个随机组中选择所有行_Sql_Postgresql_Sampling - Fatal编程技术网

Sql 如何从postgres中的n个随机组中选择所有行

Sql 如何从postgres中的n个随机组中选择所有行,sql,postgresql,sampling,Sql,Postgresql,Sampling,这个问题与在PostgreSQL中构造查询有关 假设我有下表: record entity docid sentencid 1 A 123 1231 1 A 123 1232 1 A 100 1001 1 C 100 1002 1 B 121 1212 1 B 123 1234 2 B 102 1021 2 D 111 1111 2 D 102 1022 2 E

这个问题与在PostgreSQL中构造查询有关 假设我有下表:

record   entity   docid   sentencid   
1   A   123   1231   
1   A   123   1232
1   A   100   1001
1   C   100   1002
1   B   121   1212
1   B   123   1234
2   B   102   1021
2   D   111   1111
2   D   102   1022
2   E   101   1011   
3   C   111   1115
3   C   111   1113
3   C   111   1114
是否有一个PostgresSQL查询,我可以使用它为该表中的每条记录选择n个或更少随机实体组的所有行?假设n是2。因此,查询应该为记录3选择所有行,并为记录1和记录2的任意两个随机实体组选择所有行。最终结果应按加入、实体、文档ID、句子ID排序

下面是一个n=2的示例结果:

record   entity   docid   sentencid   
1   A   100   1001
1   A   123   1231   
1   A   123   1232
1   B   121   1212
1   B   123   1234
2   D   102   1022
2   D   111   1111
2   E   101   1011   
3   C   111   1113
3   C   111   1114
3   C   111   1115
假设实体A和B是从记录1的实体A、B、C集合中随机选择的,实体D和E是从记录2的实体B、D、E集合中随机选择的。应为每个记录随机选择n个实体

我已经广泛地搜索了这个问题的答案,但没有找到任何有效的查询。谢谢你调查这件事

您可以使用带有随机顺序的行数,为每个记录组随机选择n个实体。然后把这个加入你的主表

select * from Table1 t1
join (
    select * from (
        select record, entity,
            row_number() over (partition by record order by random()) rn
        from Table1
        group by record, entity
    ) t where rn <= 2
) t2 on t1.record = t2.record and t1.entity = t2.entity

你能公布n=2的预期结果吗?我提供了n=2的可接受结果。如果你还有其他问题,请告诉我。谢谢谢谢你的回复。但是,我需要每个记录超过1个实体。在上面的示例中,我显示了每个记录2个实体。我可能也需要2个以上,但数字将保持不变。2我不想使用“where RecordThank a Tong!”明确排除记录3!它是有效的:D,也有意义。您的详细解释和演示帮助我理解查询并快速测试它。我试着对你的回答投赞成票,但我的声誉还不够高。