SQL-通过连接表本身在数据集中查找相同的数据
我试图编写一个sql查询,以找出以下内容-SQL-通过连接表本身在数据集中查找相同的数据,sql,google-bigquery,Sql,Google Bigquery,我试图编写一个sql查询,以找出以下内容- User_info column1 column2 userId1 pete katie katie pete john userId2 pete katie miles
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在第2列中没有jessica或matt,因此计数将为2
任何关于我如何处理这个问题的IDE,不幸的是我在这里画了一个空白。谢谢你我将分别测试每条记录,而不是设置一组差异,然后汇总:
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
下面是BigQuery标准SQL
#standardSQL
SELECT User_info,
(SELECT COUNT(1) FROM UNNEST(column1) value
WHERE NOT value IN (SELECT value FROM UNNEST(column2) value)
) Missing_count
FROM `project.dataset.table`
如果要应用于您问题中的样本数据-结果为
Row User_info Missing_count
1 userId1 0
2 userId2 0
3 userId3 2
我想你的第2栏和第1栏的逻辑是颠倒的。很抱歉反应太晚,我标出了正确的答案。