Mysql去重查询(根据指定字段去重)

Mysql去重查询(根据指定字段去重)在日常数据查询中 多有需要进行数据去重的查询 或删除重复数据的情况 以下罗列集中数据去重查询 1 根据全部字段的去重查询 selectdistin fromtable2 根据某些字段的去重查询 不考虑查询其他字段 selectdistin name c year c monthfromtab 或者 selectc name c year c monthfromtab name c year c month3 根据

在日常数据查询中,多有需要进行数据去重的查询,或删除重复数据的情况,以下罗列集中数据去重查询:

1、根据全部字段的去重查询:

select distinct * from table

2、根据某些字段的去重查询(不考虑查询其他字段

select distinct c_name,c_year,c_month from table

或者:

select c_name,c_year,c_month from table group by c_name,c_year,c_month

3、根据某些字段的去重查询(考虑查询其他字段

如果其他字段所有结果值都想保留,建议直接用group by 和group_concat即可

select c_name,c_year,c_month,group_concat(',') c_values from table group by c_name,c_year,c_month

4、根据某些字段的去重查询,查询重复项以外的全部数据

一般去重是根据时间、ID等,如时间最新/ID最大/value最大等等;

此处示例重复数据中ID小的是原始项ID大的是重复项;

如果要看新的数据,则将以下的 min 改为 max ,也可根据自身情况调整其他字段。

select * from tableA where c_id in (select min(c_id) minid from tableA group by c_name,c_year,c_month )

或者:

select * from tableA where c_id not in (select min(c_id) minid from tableA group by c_name,c_year,c_month having count(*)>1 )

5、根据某些字段的去重查询,查询重复项(不包含原始项,只查询重复项)

select * from tableA where c_id not in (select min(c_id) minid from tableA group by c_name,c_year,c_month )

6、根据某些字段,查询出所有重复的数据(包含原始项和重复项

select * from tableA a right join (select c_name,c_year,c_month from table A group by c_name,c_year,c_month having count(*)>1) b on a.c_name=b.c_name and a.c_year=b.c_year and a.c_month=b.c_month

7、根据某些字段,删除重复的数据(示例ID最小的是要保留的数据,其他都是不要的)

从思路上来讲,应该(实际上会出错):

delete from tableA where c_id not in (select min(c_id) minid from tableA group by c_name,c_year,c_month )

但是此时会报错: You can’t specify target table for update in FROM clause

原因是:在同一张表,不能先查询某些值,再进行update操作

解决方法是:需要先把查询处理的id结果,as 一张表,再做delete操作,调整如下:

delete from tableA where c_id in ( select * from (select c_id from tableA where c_id not in (select min(c_id) from tableA group by c_name,c_year,c_month )) a )

或者:

delete from tableA where c_id in( select * from ( select c_id from tableA where c_id in (select max(c_id) from tableA group by c_name,c_year,c_month having count(*)>1 )) a )

 

以上就是几种去重的查询方法,可根据自身业务场景做调整。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198557.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:56
下一篇 2026年3月26日 下午2:56


相关推荐

  • 解决Pycharm安装pip模块报错问题

    解决Pycharm安装pip模块报错问题找到个很好用的脚本 paycharm 使用报错 没安装模块于是安装 parsel pdfkit 报错解决办法首先查看自己运行的环境目录 cmd 运行 cdC Users MAC AppData Local Programs Python Python38 指到当前目录下时运行 pip 指令 pipinstallpd 结果报错大致意思是 pip 版本太低 哦 那更新就好了 更新豆瓣镜像源 pip 代码 python mpipinstallu

    2026年3月27日
    2
  • kafka add partitions function「建议收藏」

    kafka add partitions function「建议收藏」代码功能在java代码中调用scala接口addPartitions.使用场景在kafka中如果需要定制kafka-topic的管理,那么其中一个功能很可能会用到:增加partition数量。但是在kafka-1.0.x之上的版本的AdminUtils中预留了相关的apiaddPartitions,具体功能的实现可以参考下面源码(scala):/***Addparti…

    2022年6月26日
    29
  • 背包九讲问题——超详细

    背包九讲问题——超详细Acwing背包题库一.01背包问题问题描述有N件物品和一个容量是VV的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi,用空格隔开,分别表示第i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤100

    2022年6月28日
    30
  • Lua的三目运算

    Lua的三目运算大家都知道的三目运算符在 lua 中的写法是 aandborc 避免当 b 是 nil 的时候会返回 c 的值的写法 aand b or c 1 示例 test 5print test gt 0 test gt 0and 成功 or 失败 test gt 0 成功或 test 1print test gt

    2026年3月18日
    2
  • WinZip Pro 9 for Mac(专业zip压缩解压工具)

    WinZip Pro 9 for Mac(专业zip压缩解压工具)WinzipMac是Mac上的老牌解压缩软件,老字号的压缩软件当然更稳定更靠谱。WinzipMac注册版率先支持ribbon界面,支持ZIP、CAB、TAR、GZIP、MIME,以及更多格式的压缩文件。您可以压缩并加密文件更快捷,更安全。安装:WinZipPro9forMac(专业zip压缩解压工具)zip压缩工具Mac版功能亮点压缩文件以节省空间并发送更快的电子邮件压缩文件可节省宝贵的存储空间,减少文件上载/下载时间,并使您可以发送更快,更高效的电子邮件。-新!WinZ

    2026年4月13日
    6
  • Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]

    Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解[通俗易懂]Spring Cloud Alibaba基础教程:Nacos配置的加载规则详解

    2022年4月21日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号