如何在SQL中统计重复记录总数并赋值给变量
计算SQL表变量中重复记录的总数并赋值给变量
看起来你已经找到了分组筛选重复项的思路,但还需要把每个重复组的记录数求和才能得到目标的总数(比如示例里的2+2=4)。你的原查询返回的是每个重复ProductId的出现次数,但变量只能存储单个值,所以得先把这些多行结果聚合起来。
这里有两种可行的解决方案:
方法一:嵌套查询求和
先通过内层查询分组统计每个重复ProductId的记录数,再在外层对这些数值求和并赋值给变量:
DECLARE @duplicateCount INT; SELECT @duplicateCount = SUM(group_count) FROM ( -- 分组统计每个ProductId的出现次数,只保留出现多次的组 SELECT COUNT(ProductId) AS group_count FROM @Product GROUP BY ProductId HAVING COUNT(*) > 1 ) AS duplicate_groups; -- 验证结果,会返回符合需求的4 SELECT @duplicateCount;
方法二:总记录数与唯一记录数的差值(注意场景差异)
如果你实际需求是重复的次数(即每个组排除第一条后的数量),可以用总记录数减去唯一ProductId的数量,但这个方法得到的结果是2(7-5),和你的示例需求不符,仅作场景对比参考:
DECLARE @duplicateCount INT; SELECT @duplicateCount = (SELECT COUNT(*) FROM @Product) - (SELECT COUNT(DISTINCT ProductId) FROM @Product); SELECT @duplicateCount;
补充说明
你的原查询之所以无法直接赋值给变量,是因为它返回了多行结果(两个2),而单个变量只能存储一个值,必须通过SUM这类聚合函数将多行结果合并成单个值后,才能完成赋值操作。
内容的提问来源于stack exchange,提问作者Gamma
相关产品推荐
相关产品推荐

