SQL选择查询,根据列值从两个外键表中获取唯一条目的总数



我有三个表,如下所示-理想情况下它不会这样布局,但目前没有权力改变它。

Team              User                          Member
ID | Name         ID | TeamId | Email            ID | TeamId | Email
----------
1  | Team A       1  |  1     | a@email.com      1  |  1     | a@email.com
2  | Team B       2  |  1     | b@email.com      2  |  1     | b@email.com
3  | Team C                                      3  |  1     | c@email.com

我需要能够获得每个团队中用户和成员的组合计数,唯一基于他们的电子邮件地址。例如,团队会有一个独特的组合成员和用户的数量3。

一个表项可以存在于用户表或成员表中,也可以同时存在于用户表和成员表中。查询的结果将是TeamName和TotalUsers。

对于此类查询的任何帮助都将非常感激。

使用UNIONUserMember中收集所有不同的团队id和电子邮件组合,并将Team与该结果集和聚合进行LEFT连接:

SELECT t.id, t.name,
COUNT(email) count
FROM Team t
LEFT JOIN (
SELECT teamid, email FROM User
UNION
SELECT teamid, email FROM Member
) e ON e.teamid = t.id
GROUP BY t.id;

您可以UNION成员和User表,这样重复项将被删除

然后连接到temas表

SELECT 
t1.Name, COUNT(DISTINCT Email)
FROM 
Team  t1
JOIN
( SELECT TeamId , Email FROM User
UNION SELECT TeamId , Email FROM Member) t2 ON t2.TeamId = t1.ID
GROUP BY t1.Name   

相关内容

  • 没有找到相关文章

最新更新