如何用HAVING COUNT筛选重复结婚的夫妻(SQL技术问题)
解决方法
要找出重复结婚的夫妻组合,关键是按夫妻两人的身份证号配对来分组统计,而不是单独统计个人。下面分两种常见情况给出修改后的SQL:
1. 严格区分夫妻角色(妻子/丈夫的登记顺序固定)
如果你的数据里,夫妻的角色(谁是妻子、谁是丈夫)从来不会搞反,直接按cfmoglie和cfmarito一起分组,筛选出现次数超过1的组合就行:
SELECT cfmoglie, cfmarito, COUNT(*) AS 结婚次数 FROM matrimonio GROUP BY cfmoglie, cfmarito HAVING COUNT(*) > 1;
2. 不区分夫妻角色(A和B、B和A算同一组合)
如果存在登记时夫妻角色颠倒的情况(比如某次把A记成丈夫,另一次记成妻子),就得先把两人的身份证号按固定顺序排列,再分组统计:
SELECT -- 把较小的身份证号放前面,保证同一夫妻的组合唯一 LEAST(cfmoglie, cfmarito) AS 一方身份证号, GREATEST(cfmoglie, cfmarito) AS 另一方身份证号, COUNT(*) AS 结婚次数 FROM matrimonio GROUP BY LEAST(cfmoglie, cfmarito), GREATEST(cfmoglie, cfmarito) HAVING COUNT(*) > 1;
补充说明
- 第一种写法适合数据规范、夫妻角色从未颠倒的场景,直接用原始的角色组合统计重复次数。
- 第二种写法通过
LEAST和GREATEST函数统一组合顺序,避免因登记时角色颠倒导致同一夫妻被当成不同组合。
内容的提问来源于stack exchange,提问作者Giammarco
相关产品推荐
相关产品推荐

