pagevies、联系人和公司的 INNER JOIN - 重复的条目
INNER JOIN of pagevies, contacts and companies - duplicated entries
简而言之:3 table 内连接重复记录
我在 3 table 秒内将数据存入 BigQuery:
综合浏览量,列数:
- 时间戳
- user_id
- 标题
- 路径
联系人 列:
- 网站_user_id
- 电子邮件
- company_id
公司 列:
- id
- 名字
我想显示所有记录的综合浏览量,如果用户 and/or 公司已知,则在综合浏览量旁边显示此数据。
首先,我加入联系人和浏览量数据(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`,
`analytics.pageviews`.`title` AS `title`,
`analytics.pageviews`.`path` AS `path`,
`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 行相同的行)。
我想避免选择不同的时间戳,因为它可能导致排除来自不同用户但具有相同时间戳的有效网页浏览。
如何解决这个问题?
您的描述听起来好像在 companies
中有重复。这很容易测试:
select c.id, count(*)
from `analytics.companies` c
group by c.id
having count(*) >= 2;
您可以使用 window 函数获取详细信息:
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;
简而言之:3 table 内连接重复记录
我在 3 table 秒内将数据存入 BigQuery:
综合浏览量,列数:
- 时间戳
- user_id
- 标题
- 路径
联系人 列:
- 网站_user_id
- 电子邮件
- company_id
公司 列:
- id
- 名字
我想显示所有记录的综合浏览量,如果用户 and/or 公司已知,则在综合浏览量旁边显示此数据。
首先,我加入联系人和浏览量数据(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`,
`analytics.pageviews`.`title` AS `title`,
`analytics.pageviews`.`path` AS `path`,
`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 行相同的行)。
我想避免选择不同的时间戳,因为它可能导致排除来自不同用户但具有相同时间戳的有效网页浏览。
如何解决这个问题?
您的描述听起来好像在 companies
中有重复。这很容易测试:
select c.id, count(*)
from `analytics.companies` c
group by c.id
having count(*) >= 2;
您可以使用 window 函数获取详细信息:
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;