如何基于关系合并多行数据

时间:2020-10-08 07:52:51

标签: sql arrays google-bigquery

所以我有两列,分别是group_user_id和user_ids数组。最终目标是根据不同user_id之间的传递关系来组合user_id_list数组。

例如,当前我的数据格式如下

group_user_id              user_id_list
    123                        123
                               456
                               345
                               234
    567                        567
                               678
                               456

并且我正在尝试根据关系 123-456-567 来实现这一目标,因此要从group_user_id 123和567中加入user_id_list。PS:user_id_list中user_id的顺序无关紧要。

group_user_id              user_id_list
    123                        123
                               456
                               345
                               234
                               567
                               678
    567                        567
                               123
                               345
                               234
                               678
                               456

我知道使用graphDB之类的方法可能会更简单。但是,我坚持使用google-bigquery

1 个答案:

答案 0 :(得分:1)

我只花了几分钟的时间在研究这个问题,但希望这就是您要寻找的,并且我还没有完全错过您的问题。

您在user_id_list列上进行自联接,然后使用联接中新的group_id字段联接回原始表:

SELECT distinct
  v1.group_id v1_group_id,
  v3.user_id_list v3_user_id_list
FROM
  simon_test.test_data v1
JOIN simon_test.test_data v2
  on v1.user_id_list = v2.user_id_list
join simon_test.test_data v3
  on v2.group_id = v3.group_id
order by v1_group_id, v3_user_id_list;

以上内容产生:

|----------+--------------|
| group_id | user_id_list |
|----------+--------------|
|      123 |          123 |
|          |          234 |
|          |          345 |
|          |          456 |
|          |          567 |
|          |          678 |
|      567 |          123 |
|          |          234 |
|          |          345 |
|          |          456 |
|          |          567 |
|          |          678 |
|----------+--------------|