【问题标题】:group by id and random sample by id from two tables in big query sql从大查询sql中的两个表中按id分组和按id随机抽样
【发布时间】:2020-11-04 22:36:08
【问题描述】:

我有 2 个结构相同的表:

表1

id text        var  
1  "bla bla"   100
1  "blabla1"    30
2  "qweweqty"    0
2    etc...
7
3
3
1
..
100

表2

id text        var  
101 "bla bla"   10
101  "bla1"      60
101  "bla"    5
103    etc...
102
103
102
110
..
200

我想根据 id 从 table1 和 table2 中随机抽取数据。所以基本上,从 table1 的随机 id 样本和从 table2 的随机 id 样本中抽取每个观察值,以便 50 个 id 来自表 1 和 50 个来自表 2 。关于如何在大查询 SQL 上执行此操作的任何想法?

示例如下,我想从 table1 获取 3 个 id,从 table2 获取 3 个 id

从table1中随机选择ids 1,2,3,从table2中选择ids 101,110和103

结果表是:

id. text var
 1.   ..  ..
 1
 2
 2
 3
 3
 1
 101
 101
 101
 103
 103
 110

所以基本上任何来自 table1 的 id 为 1,2,3 的观察和来自 table2 的任何 id 为 101,103,110 的观察都会被选中并放在同一个表中: 所以段落是两个:首先从table1中随机选择一定数量的id,从table2中随机选择一定数量的id,然后我从两个表中选择与这些id对应的任何观察值,并将它们加入同一个表中

【问题讨论】:

  • 你能添加一个期望结果的例子吗?
  • 我添加了更多细节和一个示例,希望现在清楚
  • @Gordon 的回答似乎很好地解决了您的问题,您看到查询的更新版本了吗?如果仍然不符合您的需求,您能解释一下为什么会这样吗?

标签: sql random group-by google-bigquery sampling


【解决方案1】:

如果您希望每个表有 50 个 id,那么您可以使用子查询来限制它们:

select t1.*
from t1 join
     (select distinct id
      from t1
      order by rand()
      limit 50
     ) ids
     on t1.id = ids.id
union all
select t2.* 
from t2 join
     (select distinct id
      from t2
      order by rand()
      limit 50
     ) ids
     on t2.id = ids.id

【讨论】:

  • 不完全是,我不想选择 50 行,我想从 50 个 id 中选择任何行
  • @Carbo 。 . .这实际上是对查询的轻微调整。
  • 答案在哪里指定将选择 50 个 ID?我在 SQL 查询中的任何地方都没有看到“50”。
  • @DataMan 。 . .良好的观察力。
猜你喜欢
  • 2013-08-17
  • 1970-01-01
  • 2023-03-12
  • 2021-03-19
  • 2019-12-28
  • 2012-09-06
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
相关资源
最近更新 更多