此问题适用于在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的任意2个随机实体组的所有行。最终结果应按accession
,entity
排序, docid
,sentenceid
。
以下是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是从实体集合(B,D,E)中随机选择的记录2.应为每条记录随机选择n个实体。
我已经广泛搜索了这个问题的答案,但没有找到任何有效的查询。感谢您对此进行调查!
答案 0 :(得分:1)
您可以row_number
使用random()
订单随机选择每个n
群组的record
个实体。然后将其加入主表
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