微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pagevies,联系人和公司的INNER JOIN-重复的条目

如何解决Pagevies,联系人和公司的INNER JOIN-重复的条目

简而言之:3个表内部联接重复记录

我在3个表中的BigQuery中有数据:

浏览量,其中包含列:

  • 时间戳
  • user_id
  • 标题
  • 路径

联系人,其中包含列:

  • website_user_id
  • 电子邮件
  • company_id

公司具有列:

我要显示所有记录的综合浏览量,如果知道用户和/或公司,则在综合浏览量旁边显示此数据。

首先,我加入联系人和综合浏览量数据(sql是由Metabase商业智能工具生成的):

SELECT 
  `analytics.pageviews`.`timestamp` AS `timestamp`,`analytics.pageviews`.`title` AS `title`,`analytics.pageviews`.`path` AS `path`,`Contacts`.`email` AS `email`
FROM `analytics.pageviews` 
INNER JOIN `analytics.contacts` `Contacts` ON `analytics.pageviews`.`user_id` = `Contacts`.`website_user_id`
ORDER BY `timestamp` DESC

它按预期工作,我可以看到归因于已知联系人的综合浏览量。

接下来,我想显示与已知公司以及这家公司的联系人的综合浏览量:

SELECT 
  `analytics.pageviews`.`timestamp` AS `timestamp`,`Contacts`.`email` AS `email`,`Companies`.`name` AS `name`
FROM `analytics.pageviews` 
INNER JOIN `analytics.contacts` `Contacts` ON `analytics.pageviews`.`user_id` = `Contacts`.`website_user_id` 
INNER JOIN `analytics.companies` `Companies` ON `Contacts`.`company_id` = `Companies`.`id`
ORDER BY `timestamp` DESC

通过该查询,我希望仅看到已知关联的联系人和公司的综合浏览量(只是公司名称的另一列)。问题是,每个网页浏览量都有重复的行(有时是5,有时是20个相同的行)。

我要避免选择disTINCT时间戳,因为它可能导致从具有相同时间戳的不同用户中排除有效的网页浏览量。

该如何处理?

解决方法

您的描述听起来像是companies中的重复字母。这很容易测试:

select c.id,count(*)
from `analytics.companies` c
group by c.id
having count(*) >= 2;

您可以使用窗口功能获取详细信息:

select c.*
from (select c.*,count(*) over (partition by c.id) as cnt
      from `analytics.companies` c
     ) c
where cnt >= 2
order by cnt desc,id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。