当前位置: 首页 > news >正文

mysql去重查询的三种方法

文章目录

  • 前言
  • 一、插入测试数据
  • 二、剔除重复数据方法
    • 1.方法一:使用distinct
    • 2.方法二:使用group by
    • 3.方法三:使用开窗函数
  • 总结


前言

数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介绍三种剔除重复数据的方法,请针对自己的应用场景选择使用。

一、插入测试数据

下图测试数据中user_name为lilei、zhaofeng的用户是重复数据。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、剔除重复数据方法

1.方法一:使用distinct

代码如下(示例):

select distinct user_name,email,address from t_user;

如下图,已将数据剔重,重复数据仅保留1条。
在这里插入图片描述

2.方法二:使用group by

SELECT user_name,email,address FROM t_user GROUP BY user_name, email, address;

如下图,已将数据剔重,重复数据仅保留1条。

在这里插入图片描述

3.方法三:使用开窗函数

(1)如果你的数据库是MySQL8以上版本你可以直接使用开窗函数row_number()

SELECT *
FROM(SELECT t.*, ROW_NUMBER() OVER(PARTITION BY user_nameORDER BY last_login DESC) rnFROM table AS t) AS t_user
WHERE rn = 1;

(2)如果你的数据库版本低于MySQL8,使用类row_number()方法

select user_name, email, address 
from (select b.*,@rownum := @rownum+1 ,-- 定义用户变量@rownum来记录数据的行号if(@pdept=b.user_name,@rank:=@rank+1,@rank:=1) as rank,-- 如果当前分组user_name和上一次分组user_name相同,则@rank(对每一组的数据进行编号)值加1,否则表示为新的分组,从1开始@pdept:=b.user_name -- 定义变量@pdept用来保存上一次的分组idfrom (select * from t_user) b ,(select @rownum :=0 , @pdept := null ,@rank:=0) c  -- 初始化自定义变量值order by b.user_name,b.last_login desc -- 该排序必须,否则结果会不对
) result
where rank = 1;

如下图,已将数据剔重,重复数据仅保留1条。
在这里插入图片描述

总结

word文档下载地址:mysql去重查询的三种方法

http://www.lryc.cn/news/23689.html

相关文章:

  • PHP反序列化
  • 什么蓝牙耳机打电话效果最好?通话效果好的无线蓝牙耳机
  • Tesseract centos环境安装,基于springboot图片提取文字
  • Elasticsearch7.8.0版本优化——写入速度优化
  • 【Redis】Redis主从同步中数据同步原理
  • Python基础—while循环
  • linux基础(管道符,检索,vim和vi编辑使用)
  • GAN | 代码简单实现生成对抗网络(GAN)(PyTorch)
  • 华为面试题就这?00后卷王直接拿下30k华为offer......
  • html的常见标签使用
  • STM32——毕设智能感应窗户
  • golang archive/tar库的学习
  • MongoDB 详细教程,这一篇就够啦
  • python为什么慢
  • Android kotlin 组件间通讯 - LiveEventBus 及测试(更新中)
  • linux服务器时间同步
  • 扒系统CR8记录
  • 面试题(基础篇)
  • 如何利用ReconPal将自然语言处理技术应用于信息安全
  • 攻略 | 6步帮助中小微企业开拓东盟机电产品市场
  • Linux服务器磁盘分区、挂载、卸载及报错处理
  • JavaScript基础语法入门
  • Linux基础命令-ln创建链接文件
  • Day21【元宇宙的实践构想07】—— 元宇宙与人工智能
  • MySQL的InnoDB 三种行锁,SQL 语句加了哪些锁?
  • Java培训:深入解读函数式接口
  • scratch潜水 电子学会图形化编程scratch等级考试一级真题和答案解析2022年12月
  • DNS服务器部署的详细操作(图文版)
  • Compose – List / Detail: Basics实现
  • 【Java】TCP网络编程(字节/符流)