【问题标题】:Unique pairs of non-repeating values in SQLSQL 中唯一的非重复值对
【发布时间】:2022-01-17 23:28:57
【问题描述】:

问题:

我有一个格式如下的 BigQuery SQL 表:

group users
A 1,2,3
B 1,5,3
C 3,6,1
D 0,1,2

我想找到每个组和用户之间所有可能的唯一对,这样表格的格式就会这样:

group1 group2 group1_users group2_users
A B 1,2,3 1,5,3
A C 1,2,3 3,6,1
A D 1,2,3 0,1,2
B C 1,5,3 3,6,1
B D 1,5,3 0,1,2
C D 3,6,1 0,1,2

我不想重复反向配对。因此,如果 A,B 对已经分别存在于 group1group2 列中,我希望对 B,A 成为一个选项。

我的尝试:

我不知道如何做到这一点。我尝试修改其他帖子(herehere 等)中的代码,但无济于事。

【问题讨论】:

  • 您使用什么逻辑来确定A,B 胜过B,A?是不是按照字典顺序,A 是第一个,因此在您的元组中赢得了第一个位置?
  • 是的,除了观察的顺序,没有其他逻辑。我可以按字母顺序对值进行排序,但它是基于第一次观察。顺序在这里实际上并不重要,只是防止重复。如果我可以将数据转换为成对矩阵,那就更好了。

标签: sql join google-bigquery


【解决方案1】:

此查询返回您要查找的内容:

with my_data as (
select "A" as _group, [1,2,3] as users
UNION ALL
select "B" as _group, [1,5,3] as users
UNION ALL
select "C" as _group, [3,6,1] as users
UNION ALL
select "D" as _group, [0,1,2] as users
)

SELECT 
  l._group as _group_1, 
  r._group _group_2, 
  l.users as group1_users, 
  r.users group1_users, 
FROM my_data l 
  JOIN my_data r 
  ON l._group < r._group

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    相关资源
    最近更新 更多