如何从包含UNION ALL的SELECT查询中获取去重后的计数
问题原因
你最初的统计查询结果不符合预期,是因为UNION ALL会保留两个子查询返回的全部重复部门记录,直接对该结果集执行COUNT(Department)时,统计的是两个表的部门总记录条数,而非去重后的唯一部门数量。
可用解决方案
除了你最终验证可用的嵌套查询写法外,还可以选择两种更简洁的实现方式:
- 保留
UNION ALL逻辑,在外层统计时增加去重规则
SELECT COUNT(DISTINCT Department) AS DepCount FROM ( SELECT Department FROM EFP_EmployeeFollowupManagerCommit UNION ALL SELECT Department FROM EFP_EmploymentUser ) AS all_departments;
- 使用自带去重能力的
UNION替代UNION ALL,直接统计结果集行数即可
SELECT COUNT(*) AS DepCount FROM ( SELECT Department FROM EFP_EmployeeFollowupManagerCommit UNION SELECT Department FROM EFP_EmploymentUser ) AS unique_departments;
以上两种写法的返回结果和你最终使用的语句完全一致,可根据使用习惯自行选择。
内容的提问来源于stack exchange,提问作者Stig Kølbæk
相关产品推荐
相关产品推荐

