【发布时间】:2019-11-29 19:28:53
【问题描述】:
背景:我有一个 SQL 表,其中包含 acct_ids 和 component_ids,表示每个帐户使用的组件部分。账户可以有多个组件,同一个组件可以被多个账户使用。
目标:我想根据共享的 component_ids 对 acct_ids 进行“重复数据删除”;因此,如果任何 acct_id 与任何其他 acct_id 共享任何 component_id,请将它们组合成一个新 id。我正在使用 BigQuery SQL 来执行此操作。
这是数据表的示例:
+---------+--------------+
| acct_id | component_id |
+---------+--------------+
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | C |
| 2 | D |
| 2 | E |
| 3 | G |
| 3 | E |
| 3 | F |
| 4 | H |
| 4 | I |
| 5 | H |
| 5 | J |
+---------+--------------+
例如,acct_ids 1 和 2 共享 component_id C,acct_ids 2 和 3 共享 component_id E,因此所有这 3 个 acct_ids 都应该用一个共享的 id (new_id = 1) 进行标记。同样,acct_ids 4 和 5 共享 component_id H,所以这两个 acct_ids 都应该用一个共享的 id (new_id = 2) 进行标记。
对于上面的示例数据,所需的输出是:
+---------+--------------+--------+
| acct_id | component_id | new_id |
+---------+--------------+--------+
| 1 | A | 1 |
| 1 | B | 1 |
| 1 | C | 1 |
| 2 | C | 1 |
| 2 | D | 1 |
| 2 | E | 1 |
| 3 | G | 1 |
| 3 | E | 1 |
| 3 | F | 1 |
| 4 | H | 2 |
| 4 | I | 2 |
| 5 | H | 2 |
| 5 | J | 2 |
+---------+--------------+--------+
我一直在想办法解决这个问题 - 或许可以从结合 FULL OUTER JOIN 的方法开始,但我还没有能够构建一个有凝聚力的查询。
有什么建议吗?
【问题讨论】:
标签: sql google-bigquery duplicates primary-key