如何统计SQL中各ID的重复条目数并添加至同行对应列
按ID统计重复条目并添加计数列的SQL解决方案
你需要的是按每个ID分组统计条目数,并将该计数对应到每一行的“Num of Duplicates”列,用窗口函数就能直接实现,不用复杂的子查询或分组后关联。
正确SQL查询语句
SELECT ID, COUNT(*) OVER (PARTITION BY ID) AS "Num of Duplicates" FROM your_table_name;
效果展示
原表数据:
ID
AB1
AB2
AB1
AB3
AB2
AB1
执行语句后输出:
ID Num of Duplicates
AB1 3
AB2 2
AB1 3
AB3 1
AB2 2
AB1 3
为什么之前的方法出错
你提到的第一种方案返回总条目数,是因为它没有按ID分组统计,而是计算了整个表的总行数——比如错误写法用了不带PARTITION BY ID的全局COUNT(*),导致每一行都显示全表的总条数。
如果需要更新原表添加该列(而非仅查询),可以用以下语句(以MySQL为例):
-- 先给表添加目标列 ALTER TABLE your_table_name ADD COLUMN `Num of Duplicates` INT; -- 按ID分组统计后更新列值 UPDATE your_table_name t1 JOIN ( SELECT ID, COUNT(*) AS cnt FROM your_table_name GROUP BY ID ) t2 ON t1.ID = t2.ID SET t1.`Num of Duplicates` = t2.cnt;
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

