>我有一组查询,我正在尝试运行,但我在让它们一起运行时遇到问题。
我的设置如下,列名在参数中:
- 表1(电子邮件/日期)
- 表2(电子邮件/Date_Submitted)
我已经编写了 3 个查询,每个查询都完美地工作,彼此独立,但我似乎无法弄清楚如何连接它们。
查询 1 - 表 1 中的不同电子邮件 (rfi_log)
SELECT DISTINCT email, date_submitted
FROM rfi_log
WHERE date_submitted BETWEEN '[start_date]' AND '[end_date]'
查询 2 - 表 2 中的不同电子邮件(主研究)
SELECT DISTINCT email
FROM orutrimdb.mastersstudies
WHERE date BETWEEN '[start_date]' AND '[end_date]'
查询 3 - 联接查询,查找表 1 和表 2
中的重复电子邮件
SELECT rfi_log.email as emails, orutrimdb.mastersstudies.email
FROM rfi_log
CROSS JOIN orutrimdb.mastersstudies
ON orutrimdb.mastersstudies.email=rfi_log.email
WHERE date_submitted BETWEEN '[start_date]' AND '[end_date]';
我现在的问题是我需要以某种方式组合这些查询,以便我可以在日期范围内从两个表中获取不同电子邮件的计数,同时排除从查询 3 中识别的电子邮件。
我需要以下内容:
- 查询 3 = 非重复电子邮件的计数
- 查询 2 = 不同电子邮件的计数(在查询 3 中未标识)
- 查询 1 = 不同电子邮件的计数(在查询 3 中未标识)
最终,我需要在"删除重复"的日期范围内获取不同电子邮件的总数,因为两个表中都有重复项。
如何做到这一点?
执行此操作
的一种方法是使用聚合union all
。 以下内容获取有关每封电子邮件的重复信息:
select email, sum(isrfi) as numrfi, sum(isms) as numms
from ((select email, 1 as isrfi, 0 as isms
from rfilog
) union all
(select email, 0, 1
from orutrimdb.mastersstudies
)
) e
group by email;
顶部的聚合为您提供所需的信息:
select numrfi, numms, count(*), min(email), max(email)
from (select email, sum(isrfi) as numrfi, sum(isms) as numms
from ((select email, 1 as isrfi, 0 as isms
from rfilog
) union all
(select email, 0, 1
from orutrimdb.mastersstudies
)
) e
group by email
) e
group by numrfi, numms;
请注意,这还会在单个表中查找重复项。