我有三个表,如下所示-理想情况下它不会这样布局,但目前没有权力改变它。
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。
对于此类查询的任何帮助都将非常感激。
使用UNION
从User
和Member
中收集所有不同的团队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