如何修改现有CTE查询,不使用COUNT函数统计重复员工记录
解决方案
场景1:统计所有重复记录的总条数
原查询用于筛选出所有重复的员工记录(同一姓名下除第一条外的其他记录),以下修改后的查询可在不使用COUNT函数的前提下统计这些重复记录的总数:
WITH cte AS ( SELECT employeeId, employeeName, ROW_NUMBER() OVER (PARTITION BY employeeName ORDER BY employeeId asc) AS rn FROM duplicateEmployee ) SELECT SUM(CASE WHEN rn > 1 THEN 1 ELSE 0 END) AS total_duplicate_records FROM cte;
通过CASE标记重复记录(rn > 1),再用SUM累加得到重复记录的总条数,全程未使用COUNT函数。
场景2:统计每个重复姓名对应的重复记录数
如果需要统计每个姓名下的重复记录数量(即该姓名除第一条外的记录数),可使用以下查询:
WITH cte AS ( SELECT employeeName, ROW_NUMBER() OVER (PARTITION BY employeeName ORDER BY employeeId asc) AS rn FROM duplicateEmployee ), name_record_counts AS ( SELECT employeeName, MAX(rn) AS total_name_records FROM cte GROUP BY employeeName ) SELECT employeeName, total_name_records - 1 AS duplicate_count FROM name_record_counts WHERE total_name_records > 1;
先通过ROW_NUMBER给每个姓名的记录编号,MAX(rn)的值等同于该姓名的总记录数,减去1后即为该姓名的重复记录数,最后过滤掉无重复的姓名。
内容的提问来源于stack exchange,提问作者krishna sutar
相关产品推荐
相关产品推荐

