PostgreSQL 查找重复数据(一)

CREATE TABLE "public"."table2" (
  "id" int4,
  "at" timestamp(6)
)
;

ALTER TABLE "public"."table2" 
  OWNER TO "postgres";
INSERT INTO "public"."table2"("id", "at") VALUES (3148180, '2023-05-08 19:28:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148173, '2023-05-08 19:28:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148181, '2023-05-08 19:28:30');
INSERT INTO "public"."table2"("id", "at") VALUES (3148174, '2023-05-08 19:28:30');
INSERT INTO "public"."table2"("id", "at") VALUES (3148175, '2023-05-08 19:29:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148176, '2023-05-08 19:29:30');
INSERT INTO "public"."table2"("id", "at") VALUES (3148177, '2023-05-08 19:30:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148182, '2023-05-08 19:30:30');
INSERT INTO "public"."table2"("id", "at") VALUES (3148178, '2023-05-08 19:30:30');
INSERT INTO "public"."table2"("id", "at") VALUES (3148183, '2023-05-08 19:31:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148179, '2023-05-08 19:31:00');
INSERT INTO "public"."table2"("id", "at") VALUES (3148184, '2023-05-08 19:31:30');

使用聚合函数查找重复记录

基于单个字段的重复记录

如果想要找出 at重复的数据,可以基于该字段进行分组统计,并且返回行数大于 1 的分组

SELECT at, count(at) FROM table2 GROUP BY at HAVING count(at) > 1;

查询结果显示存在重复情况。如果想要查看完整的重复数据,可以使用子查询或者连接查询:

SELECT
	* 
FROM
	table2 
WHERE
	AT IN ( SELECT AT FROM table2 GROUP BY AT HAVING COUNT ( AT ) > 1 ) 
ORDER BY
	AT;

或者:

select * from table2 ou where (select count(*) from table2 inr where inr.at = ou.at) > 1

或者:

WITH d AS (
  SELECT at
  FROM table2
  GROUP BY at
  HAVING count(at) > 1)
SELECT p.*
FROM table2 p
JOIN d ON (d.at = p.at)
ORDER BY p.at;

 另一种查找重复记录的方法就是直接使用自连接查询和 distinct 操作符:

SELECT DISTINCT p.*
FROM table2 p
JOIN table2 d ON p.at = d.at
WHERE p.id <> d.id
ORDER BY p.at;

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值