SQL-通过联接表本身在数据集中查找相同的数据

时间:2019-06-18 22:28:19

标签: sql google-bigquery

我试图编写一个SQL查询来查找以下内容-

User_info   column1         column2
userId1     pete            katie    
            katie           pete     
                            john    


userId2     pete            katie    
                            miles    
                            jessica  
                            pete    

userId3     jessica         pete
            matt            katie
                            john

因此,假设我的数据在SQL中以以下方式构造,其中column1和column2基本上是record类型的。

如果column1中有一个不属于column2的名称,那么我基本上想报告一下。

所以我的结果应该类似于

User_info   Count
userId1     0
userId2     0
userId3     2

userId1在列2中存在pete和katie,因此计数为0

userId2在列2中具有pete,因此计数将为0

userId3在column2中没有杰西卡或马特,因此计数将为2

任何人都对如何解决此问题持怀疑态度,很遗憾,我在这里画了一个空白。谢谢

2 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

export class FooMap extends Map{
    constructor(otherMap : Map<number,Foo>){
        super(otherMap);
    }
}

如果要应用于您的问题的样本数据-结果为

super()

答案 1 :(得分:0)

我会分别取消每条记录的嵌套,而不是设置差异,然后进行聚合:

with rec1 as (
  select userid, x
  from tbl 
  cross join unnest(tbl.column1) as x
), 
rec2 as (
  select userid, x
  from tbl 
  cross join unnest(tbl.column2) as x
), 
diff as (
  select * from rec1
  except 
  select * from rec2
)
select userid, count(1)
from diff
group by userid
order by userid