You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:按邮箱去重统计各团队用户与成员表总唯一人数

解决方案

前提说明

当前无表结构修改权限,涉及3张表结构与示例数据:

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

统计要求:

  • 按团队维度统计User、Member两表中去重邮箱对应的总人数
  • 同一邮箱在同团队的两表中同时出现时仅计数1次
  • 返回字段为TeamName(团队名)、TotalUsers(去重后总人数)
  • 示例中Team A预期统计值为3

实现SQL

核心逻辑是先通过UNION合并两表的TeamId+Email数据,利用UNION自动去重的特性剔除同团队下的重复邮箱,再关联团队表分组计数即可,兼容无成员的空团队场景:

SELECT
  t.Name AS TeamName,
  COUNT(ue.Email) AS TotalUsers
FROM Team t
LEFT JOIN (
  SELECT TeamId, Email FROM User
  UNION
  SELECT TeamId, Email FROM Member
) ue ON t.ID = ue.TeamId
GROUP BY t.ID, t.Name;

逻辑说明

  • 用LEFT JOIN关联去重后的邮箱集合,确保没有任何用户/成员的团队(如示例中的Team B、Team C)不会被过滤,这类团队的TotalUsers会返回0
  • 选择UNION而非UNION ALL:UNION会自动对结果集中的完全重复行做去重,刚好满足同团队下重复邮箱只保留1条的规则,无需额外加DISTINCT做二次处理
  • 分组时同时传入t.ID和t.Name:避免不同团队重名导致的统计错误,因为ID是Team表的主键,能唯一标识一个团队

示例数据运行结果

TeamNameTotalUsers
Team A3
Team B0
Team C0

内容的提问来源于stack exchange,提问作者Kevin I

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:57:21