Sql 如何从postgres中的n个随机组中选择所有行
这个问题与在PostgreSQL中构造查询有关 假设我有下表: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
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,也有意义。您的详细解释和演示帮助我理解查询并快速测试它。我试着对你的回答投赞成票,但我的声誉还不够高。