我们认为clientid和fullvisitorid是一对一对应的。但是,下面的查询显示其他情况。
select count(*) ct_byfullvisitorid --121409
from
( Select distinct fullvisitorid
FROM `project.datasouce.ga_sessions_20180705`
)
select count(*) ct_byclientid --121397
from
( Select distinct clientid
FROM `project.datasouce.ga_sessions_20180705`
)
我们期望两个查询返回完全相同的值,但事实并非如此。因此,我们认为我们可以使用以下查询来列出引起差异的客户端ID
select *
from
(
Select clientid, fullvisitorid
FROM `project.datasouce.ga_sessions_20180705`
) as a
where exists
(
Select *
FROM `project.datasouce.ga_sessions_20180705` s2
where a.clientid = s2.clientid and a.fullvisitorid != s2.fullvisitorid
)
我们又错了-该SQL语句返回零记录。
有人遇到同样的问题吗?谁能解释情况?
谢谢!
答案 0 :(得分:2)
您可以执行以下操作:
select fullvisitorid, count(distinct clientid) as numclients
from project.datasouce.ga_sessions_20180705
group by fullvisitorid
having count(distinct clientid) <> 1;
和
select clientid, count(distinct fullvisitorid) as numvisitors
from project.datasouce.ga_sessions_20180705
group by clientid
having count(distinct fullvisitorid) <> 1;
答案 1 :(得分:0)
事实证明clientID可以为null。这是完全没想到的。感谢Gordon提供的SQL。