pg数据库查询重复数据并可识别空数据列重复

根据多个字段查询重复数据:SELECT A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1 即可,但是现在的需求是:

最终查询的字段多于分组字段,且同一字段的空值也视为重复。在网上查询了很多资料,也询问了同事最后尝试出如下sql:

SELECT A,B,C,D,E FROM TABLE A WHERE EXISTS(SELECT A,B,C FROM TABLE B WHERE CONDITION AND COALESCE(A.A,'0')=COALESCE(B.A,'0') AND COALESCE(A.B,'0')=COALESCE(B.B,'0') AND COALESCE(A.C,'0')=COALESCE(B.C,'0') GROUP BY A,B,C HAVING COUNT(*)>1);

注意:上述sql中coalesce()函数中的后一个值是自己设置的,但设置的值的类型要与前一个值的类型相同。


如果要处理相同条件下查询出的数据,可使用如下sql:

DELETE FROM TABLE WHERE ID NOT IN(SELECT ID FROM

(SELECT MIN(ID) ID,A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1) C) 

AND ID IN(SELECT ID FROM TABLE A WHERE EXISTS 

(SELECT A,B,C FROM TABLE B WHERE CONDITION AND COALESCE(A.A,'0')=COALESCE(B.A,'0') AND COALESCE(A.B,'0')=COALESCE(B.B,'0') AND COALESCE(A.C,'0')=COALESCE(B.C,'0') GROUP BY A,B,C HAVING COUNT(*)>1))

这里涉及到IN 与EXISTS,NOT IN与NOT EXISTS的区别,有兴趣的同学可以查一查。

虽然能实现查重及去重功能,但是在大数据量时模型会运行特别慢,和数据库也有一定关系。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值