如何去除数据库中重复的数据

2023-11-13

准备工作

原始表users:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL
);

INSERT INTO users (first_name,last_name,email) 
VALUES ('Chuan ','Jiang','HiJiangChuan@gmail.com'),
       ('Chuan ','Jiang','HiJiangChuan@gmail.com'),
       ('Ch. ','Jiang','HiJiangChuan@gmail.com'),
       ('Ke','Xie','xieke@sina.com'),
       ('Ke','Xie','xieke@qq.com'),
       ('Amei','Song','amei@163.com');
       

默认id为自增主键;

在这里插入图片描述

方法一:用distinct 联合去重

第一步:distinct后面加多个字段,即多个字段联合起来去重,就能只筛选出一条数据!

select distinct first_name,last_name,email from users;

在这里插入图片描述

第二步:新建一个表tmp,将以上数据导入即可;

CREATE TABLE tmp (
    id INT PRIMARY KEY AUTO_INCREMENT,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(255) NOT NULL
);

INSERT INTO users_copy (first_name,last_name,email) 
SELECT DISTINCT first_name,last_name,email FROM users;

注意:此处使用insert into …select导入,但是指定了后三个字段,并不包括自增的主键;

方法二:使用窗口函数限制row_number()=1

思路
重复即first_name, last_name,email 三个字段都相等,则对这个三个字段开窗,也就是重复的数据会在一个窗口,
使用row_number对重复的数据排序,最后用子查询限制row_number只为1,即对重复的数据之筛选出来一条;

第一步:对重复数据开窗,使用row_number()函数

select first_name,last_name,email, 
row_number()over(partition by first_name,last_name,email) r from users;

在这里插入图片描述

第二步:限制row_number为1即可;

SELECT first_name,last_name,email from
      (SELECT first_name,last_name,email, 
        row_number()over(partition by first_name,last_name,email) r from users)as q 
       where r=1;

在这里插入图片描述

方法三:使用窗口函数删除row_number()>1

直接在原表上删除数据,条件是对字段联合开窗后,row_number>1 即重复的数据;

DELETE FROM users
WHERE id IN (
    SELECT id
    FROM (
        SELECT 
            id, ROW_NUMBER () Over (PARTITION BY first_name,last_name,email ORDER BY id) as r 
        from users
    ) q
    WHERE r > 1
);

结果:
在这里插入图片描述

方法四:group by去重

即对重复的字段联合分组即可,自然就只过滤出一条数据了!
然后将结果导入临时表;

INSERT INTO tmp (first_name,last_name,email)  
SELECT first_name,last_name,email from users group by first_name,last_name,email;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何去除数据库中重复的数据 的相关文章

  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 使用 Athena 从 AWS WAF 日志中的规则组列表获取终止规则

    我跟着这些说明 https docs aws amazon com athena latest ug waf logs html将我的 AWS WAF 数据放入 Athena 表中 我想查询数据以查找具有 BLOCK 操作的最新请求 此查询
  • 如何返回调用不同数据库中的存储过程的远程数据库名称?

    我在一个 SQL Server 2008 R2 上有许多不同的数据库 为了便于论证 我们将它们称为 DB A DB B 和 DB C 我被要求开发一个将存在于 DB A 上的存储过程 该存储过程将用于删除和创建索引 并在 DB A 的表中存
  • BigQuery 标准 SQL 中具有不同架构的联合表

    附加具有不同架构的表的最佳方法是什么 表 0 架构 表1 架构 这很好用 SELECT img1 NULL as img2 FROM xxx staging table0 UNION ALL SELECT img1 img2 FROM xx
  • PHP - While/Else 错误? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下
  • UTF-8、PHP 和 XML Mysql

    我在解决这个问题时遇到了很大的问题 我有一个编码 latin1 swedish ci 的 mysql 数据库和一个存储名称和地址的表 我正在尝试输出 UTF 8 XML 文件 但在使用以下字符串时遇到问题 Otiv gen它被输出为Otiv
  • 将静态值添加到 SQL 查询的结果

    我想知道是否有一种方法可以通过 SQL 查询来完成此任务 我有一个表 我们称之为 LISTOFTHINGS 它有两个感兴趣的字段 ID 和 NAMEOFTHING 我想要做的是构造一个查询 以便返回的是该查询的结果 SELECT ID NA
  • SELECT * FROM 员工 WHERE NULL IS NULL; SELECT * FROM 员工 WHERE NULL = NULL;

    最近开始学习oracle和sql 在学习的过程中 我遇到了我的朋友在面试时被问到的几个问题 SELECT FROM Employees WHERE NULL IS NULL 此查询生成Employees 表中的所有行 至于我所理解的Orac
  • mysql错误1442的真正原因是什么?

    好吧 我在互联网上寻找了很多地方来寻找原因mysql error 1442其中说 无法更新存储函数 触发器中的表 unlucky table 因为 它已被调用此存储的语句使用 功能 触发器 有人说这是 mysql 中的一个错误或者它不提供的
  • 删除除一行之外的所有具有重复值的行

    我有一个包含三列的表 KEY VALUE and LAST UPDATED 有重复的VALUE字段 我想删除所有具有相同的行VALUE和其他人一样except获取最新更新的信息 因此 如果表包含这些行 1 A 2013 11 08 2 B
  • 如何延长SQL查询的超时时间

    这不是连接超时 因为与数据库的连接正常 问题是我调用的存储过程花费的时间超过 30 秒 并导致超时 该函数的代码如下所示 SqlDatabase db new SqlDatabase connectionManager SqlConnect
  • MySQL Workbench 深色主题

    我刚刚开始学习 SQL 课程 并且一直在尝试不同的 GUI 我喜欢使用 MySQL Workbench 但白色背景刺瞎了我的眼睛 我已经搜索并找到了一些其他讨论编辑 xml 文件的相关帖子 我尝试用几种不同的方式对其进行编辑 但无济于事 我
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • MySQL 错误 1264:列的值超出范围

    As I SETMySQL 中的 cust fax 表如下所示 cust fax integer 10 NOT NULL 然后我插入这样的值 INSERT INTO database values 3172978990 但随后它说 错误 1
  • T-SQL:检查电子邮件格式

    我有这样的场景 我需要物理数据库中的数据完整性 例如 我有一个变量 email address VARCHAR 200 我想检查一下值是否为 email address是电子邮件格式 有人知道如何检查 T SQL 中的格式吗 非常感谢 我使
  • 如何增加每次 INSERT INTO 迭代的值?

    我有一个查询 如下所示 第 1 列位于 另一列是 varchar 100 INSERT INTO TABLE1 column1 column2 SELECT MAX column1 FROM TABLE1 1 anotherColumn F
  • 如何设置 ssrs 报告上日期和时间的格式?

    在 SSRS 报告中我需要显示todays date and current time 我试过这个 FormatDateTime Now MM dd yyyy hh mm tt 但这对我来说不起作用 给出了错误 任何人请帮助我express
  • CS0246 找不到类型或命名空间名称“ErrorViewModel”(您是否缺少 using 指令或程序集引用?)

    我收到 CS0246 错误代码 我正在做一个 MVC net core 项目 我正在将 Razor 合并到我的 C 代码中 我在进行构建时收到此错误 我在最后一行收到错误 有人能帮我解决这个问题吗 global Microsoft AspN
  • mysql 无法向用户授予权限,出现错误:ERROR 1819 (HY000): 您的密码不满足当前策略要求

    我正在将一个新应用程序迁移到包含 MySQL 数据库的生产环境 尝试使用以下命令授予所需权限时 GRANT ALTER CREATE ON MyDB to ThisUser 我收到错误 ERROR 1819 HY000 Your passw
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y

随机推荐

  • 解决mysql一段时间后不能启动

    问题 同样的问题其实已经发生过好几次 就是本地计算机上的mysql服务器突然无法启动 在控制面板中尝试启动服务的时候报错 本地计算上的mysql服务启动后停止 某些服务在未由其他服务或程序启动时将自动停止 以前曾经 解决 过这个问题 加引号
  • webcore简易教程(一)

    简介 tms 公司出品 2018年推出 现在最新的1 3版本 原理 pas转换成html js pas2js 特点 可以直接在各种浏览器上运行 优点 1 生成js 跨平台 2 可以使用fnc组件 功能扩展较好 3 chrome浏览器上可以调
  • Python复习的知识点

    python语言程序设计基础的复习笔记 第一章内容 1 在python语言中解释和编译的区别 编译 编译是将源代码转换成目标代码的过程 源代码是计算机高级语言的代码 而目标代码则是机器语言的代码 执行编译的计算机程序称为编译器 Compil
  • T1 载波速率 为什么是1.544Mbps?

    这是大二时上的一节网络通信技术基础上学的内容 期末时却没能写出来 一直觉得有些遗憾 所以写在博客的第一篇 希望自己可以激励自己 知错则改 不断进步 分割线 人的话音信道在4Mhz之内 根据奈奎斯特采样定理按照2倍8MHz采样 并128级量化
  • 大工17春计算机组成原理,大工17春《计算机组成原理》在线作业3

    谋学网http doc wendoc com 一 单选题 共 10 道试题 共 50 分 V 1 是构成控制信号序列的最小单位 A 微程序 B 微操作命令 C 微指令 D 控制存储器 2 寻址方式中的寄存器间接寻址 其操作数处在 A 通用寄
  • win10打印机终结点映射器_解决win8打印机提示“终结点映射器中没有更多的终结点可用”的方法...

    打印机是我们办公是必备的一个设备 因此想必大家在办公室都给电脑安装了打印机吧 最近有位Win8用户在给电脑安装打印机的时候遇到了一个错误提示 虽然成功的安装了打印机 但是系统却提示 终结点映射器中没有更多的终结点可用 遇到这样的错误提示之后
  • 杂记——11.eclipse中更改Tomcat的配置

    这篇文章讲一下在eclipse中如何更改Tomcat的相关配置 第一步 打开eclipse 第二步 点击下方视窗的Servers 第三步 双击Tomcat 然后如下图所示 第四步 设置Tomcat的启动时间 第五步 启动Tomcat
  • gitee同一台电脑使用多个账号的问题

    官方文档 https gitee com help articles 4238 article header0 目录 一 通过 https ssh 协议推拉代码 二 通过 https 推拉代码但是存在多个账号的问题 三 通过 ssh 推拉代
  • python3 判断列表是一个空列表

    python3 判断空列表 python3 有个判断列表是否为空的需求 试了好多方式 比如 a if a is not None COMMAND a if a 0 is None COMMAND 各种乱七八糟的逻辑 老是无法满足 其实很简单
  • Unity3D笔记第三天——GUI

    GUI GUI是Graphical User Interface的缩写 Unity的图形界面系统能容易和快速创建出各种交互界面 与传统的方法 创建GUI对象 标出位置 再写对应的事件函数不同 只需要用很少的代码 就可以把这些工作搞定 原理是
  • 2023企业级数仓建设概要

    一 前言 1 1 背景 无忧搬家数据以前很多都是数仓同学从业务库负责接入数据至ods层 然后就由各个下游分析师取ods贴源层数据然后进行取数计算分析 数仓这边缺乏沉淀公共层数据 从而有以下问题 直接从ods贴源层取数据 业务研发侧一改造则下
  • FastMM内存管理器在使用多线程情况下需要注意的问题。

    FastMM内存管理器在使用多线程情况下需要注意的问题 问题1 注 如果你在Delphi中 只是用TThread类创建线程 不会用到API函数CreateThread创建线程 哪么下面这篇文章你可以完全忽视 当然 如果你耐心的看完了下面这篇
  • 如何编写一份完整的软件测试报告?(进阶版)

    目录 背景 一 什么是测试报告 二 测试报告是给谁看的 三 测试报告应该怎么写 1 测试报告的内容 1 1 工作内容 1 2 软件结果 1 3 展开说说 1 4 你的价值 2 测试报告的结构 2 1 首先呈现出你的结论 2 2 当前遗留问题
  • 伪需求 or 新机遇——2018年DApp分析

    DApp的全称为Decentralized Application 是指去中心化应用或者分布式应用 DApp的出现是区块链应用落地的有益尝试 DApp也被认为是开启了区块链3 0时代的产品 因此 DApp被众多区块链业内人士寄予厚望 尽管2
  • 51单片机使用定时器0定时1ms的配置操作

    51单片机使用定时器0定时1ms的配置操作 51单片机的定时器0结构 配置的定时器0的方式 配置的程序代码内容 51单片机的定时器0结构 51单片机是一种广泛应用于嵌入式系统中的芯片 具有强大的计时和计数功能 其中的定时器0可以用来实现精确
  • 嘴说手画Spark的Bykey操作-groupByKey、reduceByKey、aggregateByKey 和 sortByKey

    之前写过一篇文章分析Spark Shuffle的原理 知道了Shuffle是性能杀手的原因 但在实际业务中 Shuffle操作通常不可避免 毕竟Spark基础的用途就是对大数据进行统计分析 由于数据分布的分散性 导致相同Key的数据汇集到一
  • 只能看到部分局域网计算机,为什么局域网中只能看到部分电脑

    局域网中只能看到部分电脑的原因 那是因为其他电脑没有开启共享模式 也就是来宾账号关闭了 需要在用户组中打开才行 局域网共享设置步骤如下 1 更改不同的计算机名 设置相同的工作组 2 我的电脑右键 管理 计算机管理 本地用户和组 用户 更改管
  • 计算机基础 英语名称,计算机英语词汇:计算机基础知识

    computer n 电脑 电子计算机 arithmetic logic unit 算术逻辑部件 manipulate vt 操纵 操作 keyboard n 键盘 information n 消息 知识 printer n 打印机 han
  • Log.d 日志调试查看(所有平台)

    https www cnblogs com onechen p 6436748 html http docwiki embarcadero com Libraries Berlin en FMX Types Log d 转载于 https
  • 如何去除数据库中重复的数据

    去除数据库中重复的数据 准备工作 方法一 用distinct 联合去重 方法二 使用窗口函数限制row number 1 方法三 使用窗口函数删除row number gt 1 方法四 group by去重 准备工作 原始表users CR