postgresql 删除重复数据案例详解

1.建表

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : PostgreSQL
 Source Server Version : 110012
 Source Host           : localhost:5432
 Source Catalog        : postgres
 Source Schema         : public

 Target Server Type    : PostgreSQL
 Target Server Version : 110012
 File Encoding         : 65001

 Date: 30/07/2021 10:10:04
*/

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS "public"."test";
CREATE TABLE "public"."test" (
  "id" int4 NOT NULL DEFAULT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL,
  "age" int4 DEFAULT NULL
)
;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO "public"."test" VALUES (1, 'da', 1);
INSERT INTO "public"."test" VALUES (2, 'da', 12);
INSERT INTO "public"."test" VALUES (3, 'dd', 80);
INSERT INTO "public"."test" VALUES (4, 'dd', 80);
INSERT INTO "public"."test" VALUES (5, 'd1', 13);

-- ----------------------------
-- Primary Key structure for table test
-- ----------------------------
ALTER TABLE "public"."test" ADD CONSTRAINT "test_pkey" PRIMARY KEY ("id");

2.根据名称获取重复

先看看哪些数据重复了

select name ,count(1)  from test group by name  having count(1)>1

输出.

name        count

da              2

dd              2

3.删除所有重复数据

注意把要更新的几列数据查询出来做为一个第三方表,然后筛选更新。

delete from test where name in (select t.name from (select name ,count(1)  from test group by name  having count(1)>1) t)

4.保留一行数据

这里展示我们需要保留的数据:重复数据,保留ID最大那一条

SELECT
 1.
FROM
 test
WHERE
 id NOT IN (
 ( SELECT min( id ) AS id FROM test GROUP BY name )
 )

5.删除数据

DELETE
FROM
 test
WHERE
 id NOT IN (
 SELECT
  t.id
 FROM
 ( SELECT max( id ) AS id FROM test GROUP BY name ) t
 )

到此这篇关于postgresql 删除重复数据案例详解的文章就介绍到这了,更多相关postgresql 删除重复数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PostgreSQL删除更新优化操作

    1. 先说删除吧,因为刚搞了. 删除缓慢的原因:主要是约束的问题.(数据库在有约束的时候,进行操作,会根据约束对相关表进行验证,可想而知,20W的数据验证要耗费多久的时间).其次就是sql的编写.(sql如果查询中包含子查询等的可以优化的where会影响匹配的速度<查询的话就不多逼逼了>).索引的问题 请看下面的 补充部分 具体解决方法: ALTER TABLE tableName DISABLE TRIGGER ALL; delete 目标语句 ALTER TABLE tableName E

  • PostgreSQL 实现快速删除一个用户

    背景 在多租户场景或者其他场景下,很多时候需要主动清理一些用户,本文将介绍PostgreSQL 下如何快速删除一个用户(role). 具体方法 一般情况下直接执行 drop role xxx; 就可以把这个用户删除.但是很多时候会因为用户有依赖而报错. 权限依赖 postgres=# create role test with login; CREATE ROLE postgres=# grant all on database postgres to test; GRANT postgres=

  • PostgreSQL 删除check约束的实现

    删除check约束: 1.\d table_name 查找约束名称 \d dm_alarms_fct_20170613 "dm_alarms_fct_20170613_dm_transct_date_key_check" 2.alter table .. drop constraint .. ALTER TABLE "dm_alarms_fct_20170613" Drop constraint "dm_alarms_fct_20170613_dm_tra

  • postgresql 删除重复数据的几种方法小结

    在使用PG数据库的这段时间,总结了三种删除重复数据的方法,其中最容易想到的就是最常规的删除方法,但此方法性能较差,删数据耗时较久,虽容易实现,但性能太差,影响写数据的速率. 另外就是被使用的group by删除方法,效率较高. 还有一种是刚发现的,还没有验证,现在就总结下这三种删除方法,并验证各自的执行效率. 首先创建一张基础表,并插入一定量的重复数据. test=# create table deltest(id int, name varchar(255)); CREATE TABLE te

  • postgresql删除主键的操作

    ALTER TABLE tablename DROP CONSTRAINT primaryname. talbename:表示表名 primaryname:表示主键名 例子: postgres=# \d c_tab; Table "public.c_tab" Column | Type | Modifiers ---------------+-----------------------------+----------- uptime | timestamp without time

  • postgresql 实现多表关联删除

    t_aj_ajjbxx t_aj_ajfbxx t_xt_dwxx 两表关联,删除一张表中数据 delete from db_lx.t_aj_ajfbxx ajfb USING db_lx.t_xt_dwxx dw where dw.c_bh=ajfb.c_ssdw and dw.c_sfbh='65'; 只有t_aj_ajfbxx 表中数据被删除 三表关联,删除一张表中数据 delete from db_lx.t_aj_ajjbxx ajjb USING db_lx.t_aj_ajfbxx a

  • Postgresql创建新增、删除与修改触发器的方法

    新增触发器 第一步:创建函数 为待模糊查询的表创建函数 CREATE OR REPLACE FUNCTION fuzzy_query_func() RETURNS TRIGGER AS $$ BEGIN INSERT INTO fuzzy_query(id,name,address,table_name) VALUES (new.id, NEW.name,NEW.address,TG_TABLE_NAME); RETURN NEW; END; $$ LANGUAGE plpgsql; 第二步:创

  • mybatis postgresql 批量删除操作方法

    PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统.POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询.外键.触发器.视图.事务完整性.多版本并发控制等.同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型.函数.操作符.聚集函数.索引方法.过程

  • postgresql 删除重复数据案例详解

    1.建表 /* Navicat Premium Data Transfer Source Server : localhost Source Server Type : PostgreSQL Source Server Version : 110012 Source Host : localhost:5432 Source Catalog : postgres Source Schema : public Target Server Type : PostgreSQL Target Server

  • MySQL 去除重复数据实例详解

    MySQL 去除重复数据实例详解 有两个意义上的重复记录,一是完全重复的记录,也即所有字段均都重复,二是部分字段重复的记录.对于第一种重复,比较容易解决,只需在查询语句中使用distinct关键字去重,几乎所有数据库系统都支持distinct操作.发生这种重复的原因主要是表设计不周,通过给表增加主键或唯一索引列即可避免. select distinct * from t; 对于第二类重复问题,通常要求查询出重复记录中的任一条记录.假设表t有id,name,address三个字段,id是主键,有重

  • java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据,则给这些重复数据加上编号,上述数据改为:aa1, bb1, aa2, bb2, cc, dd. 算法如下: public static void same(List<String> list) { String [] indexArr ; Map<String, String> map

  • Ajax responseText解析json数据案例详解

    解决ajax处理服务器端返回结果responseText中是JSON的数据. 第一,json格式的文件内容如下: { "city":"ShangHai", "telephone":"123456789" } 第二,服务器端返回的json数据就是上述的内容在responseText中,现在要取出来,方法有两种: 方法1: var json=JSON.parse(request.responseText); alert(json.

  • SQL Server批量插入数据案例详解

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters),高效插入数据. 新建数据库: --Create DataBase create database BulkTestDB; go use BulkTestDB; go --Create Table Create tab

  • Mac node删除以及重新安装案例详解

    Mac node 删除 重新安装 删除 node -v sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm sudo rm /usr/local/bin/node sudo rm /usr/local/share

  • Vue之使用mockjs生成模拟数据案例详解

    目录 在项目中安装mockjs 在Vue项目中使用mockjs的基本流程 Mock语法规范 数据模板定义规范(Data Template Definition,DTD) 数据占位符定义规范(Data Placeholder Definition,DPD) Mock.mock() Mock.Random() 在项目中安装mockjs 在项目目录下执行以下安装命令 npm install mockjs --save 在Vue项目中使用mockjs的基本流程 安装完成后,在项目src/utils目录下

  • ajax请求json数据案例详解

    今天有这样一个需求,点击六个大洲,出现对应的一些请求信息,展示在下面,请求请求过后,第二次点击就无需请求. 如图所示:点击北美洲下面出现请求的一些数据 html代码结构: <div class="conSixmap"> <div class="name conmap01" data-name="beimeizhou"> <a href="javascript:void(0)">北美洲<

  • 微信小程序左滑删除功能开发案例详解

    直接进入正题,我们需要做的就是通过手指滑动列表项后,右侧出现删除: 比如说像这样: 向左边滑动后出现如下的效果: 开始撸代码- 假设我们有N个列表项来自一个数组list,先确定基本的结构 <view class="list" wx:for="{{list}}" wx:key> <view class="item"> <view class="wrap">{{item}}</view&g

随机推荐