首页 > 解决方案 > 在bigquery中转换多对多对一对多的关系

问题描述

我在一个表中有 2 列-

Parentid                                                   ID       
3_UExpiZlgpglxaqM141IoDXtusBlpEcGjruIA                     1319760694.1580758970
3_UExpiZlgpglxaqM141IoDXtusBlpEcGjruIA                     667017325.1580160238
SorWqMp9k2NbOMeop-GomrzOTGerTDTnGzq6Ig                     667017325.1580160238
SorWqMp9k2NbOMeop-GomrzOTGerTDTnGzq6Ig                     109851370.1575305452
SorWqMp9k2NbOMeop-GomrzOTGerTDTnGzq6Ig                     1319760694.1580758970
7KoIW56HitFcs5y9huhfmh2RQgUXBdtrY0w                        1319760694.1580758970

由于第 3、4、5 行具有相同的 parentid - SorWqMp9k2NbOMeop-GomrzOTGerTDTnGzq6Ig - 我只想选择 G3 和 ID1、ID2、ID3。

我的目标是将最大数量的 ID 映射到一个 Parentid。

如何在 bigquery 中做到这一点?

标签: google-bigquery

解决方案


根据您的问题,您只想在重复字段中选择一个Parentid和相应的ID

您可以使用ARRAY_AGG()方法实现这一点,它返回一个表达式值的ARRAY。您还可以向该方法添加 distinct,以便您只返回唯一ID。我使用了您提供的示例数据和您的语法如下。

#standadSQL
SELECT
  Parentid,
  ARRAY_AGG(Distinct ID) AS ID
FROM
  `project_id.dataset.source_table`
GROUP BY
  Parentid

而输出,

在此处输入图像描述


推荐阅读