gpt4 book ai didi

postgresql - 如何生成组的随机样本,包括组中的所有人,其中 group_id(但不是 person_id)随时间变化?

转载 作者:行者123 更新时间:2023-11-29 13:00:19 26 4
gpt4 key购买 nike

我有这样的数据:

+----------+-----------+------------+------+
| group_id | person_id | is_primary | year |
+----------+-----------+------------+------+
| aaa1 | 1 | TRUE | 2000 |
| aaa2 | 1 | TRUE | 2001 |
| aaa3 | 1 | TRUE | 2002 |
| aaa4 | 1 | TRUE | 2003 |
| aaa5 | 1 | TRUE | 2004 |
| bbb1 | 2 | TRUE | 2000 |
| bbb2 | 2 | TRUE | 2001 |
| bbb3 | 2 | TRUE | 2002 |
| bbb1 | 3 | FALSE | 2000 |
| bbb2 | 3 | FALSE | 2001 |
+----------+-----------+------------+------+

数据设计是这样的

  1. person_id 跨时间唯一标识一个人
  2. group_id 在每一年内唯一标识一个组,但可能会逐年变化
  3. 每个组包含主要和非主要个体

我的目标有三个:

  1. 获取随机样本,例如10% 的主要个体
  2. 获取这些主要个体在数据库中出现的所有时间段的数据
  3. 获取与在第一步和第二步中采样的任何主要个体共享一个组的任何非主要个体的数据

我不确定从哪里开始,因为我需要先抽取主要个体的随机样本并获取他们的所有观察结果。据推测,我可以通过生成一个在任何 person_id 中都相同的随机数,然后基于它进行采样来做到这一点。 然后,我需要获取包含任何这些主要个体的 group_id 列表,并提取与这些 group_id 关联的所有记录。

我不知道从哪里开始这些查询和子查询,而且不幸的是,我用来访问这个数据库的界面无法在单独的查询之间链接信息,所以我无法拉出随机列表 person_id 用于主要个人,然后使用该文本文件在第二个查询中过滤 group_id;我必须在一个查询中完成所有操作。

最佳答案

完成此操作的快速方法是:

select
data_result.*
from
data as data_groups join
(select
person_id
from
data
where
is_primary
group by
person_id
order by
random()
limit 1) as selected_primary
ON (data_groups.person_id = selected_primary.person_id)
JOIN data AS data_result ON (data_groups.group_id = data_result.group_id AND data_groups.year = data_result.year)

我什至做了一个fiddle这样您就可以对其进行测试。

查询非常简单,先获取样本,然后获取他们的组,然后获取这些组的所有用户。

由于数据集太小,请注意那里的 Limit 1 子句。您可以输入一个值或一个获得正确百分比的查询。

如果有人有使用窗口函数的答案,我希望看到。

注意:下次请提供架构和数据插入以便于回答。

关于postgresql - 如何生成组的随机样本,包括组中的所有人,其中 group_id(但不是 person_id)随时间变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com