mysql 数据去重的三种方式[实战]

本文介绍了在数据库操作中如何使用DISTINCT关键字、GROUP BY和row_number窗口函数进行数据去重,通过实例展示了在实际项目中的应用,并总结了注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景。

最近在和系统模块做数据联调,其中有一个需求是将两个角色下的相关数据​对比后将最新的数据返回出去,于是就想到了去重,再次做一个总结。

二、数据去重三种方法使用。

1.​通过MySQL DISTINCT:去重(过滤重复数据)

​ 1.1.在使用 mysql SELECT 语句查询数据的时候返回的是所有匹配的行。

SELECT  t.age FROM t_user t

可以看到查询结果返回了 10 条记录,其中有一些重复的 age 值,有时出于对数据分析的要求,需要消除重复的记录值。

1.2.DISTINCT 关键字指示 MySQL 消除重复的记录值。

语法格式为:

SELECT DISTINCT <字段名> FROM <表名>;

SELECT DISTINCT t.age FROM t_user t

 由运行结果可以看到,这次查询结果只返回了 5 条记录的 age 值,且没有重复的值。

ps:

其中,“字段名”为需要消除重复记录的字段名称,多个字段时用逗号隔开。

使用 DISTINCT 关键字时需要注意以下几点:

  • DISTINCT 关键字只能在 SELECT 语句中使用。

  • 在对一个或多个字段去重时,DISTINCT 关键字必须在所有字段的最前面。

  • 如果 DISTINCT 关键字后有多个字段,则会对多个字段进行组合去重,也就是说,只有多个字段组合起来完全是一样的情况下才会被去重。

2.group by

 

SELECT t.age FROM t_user t GROUP BY t.age;

3.row_number窗口函数。​

 语法格式为:

row_number() over (partition by <用于分组的字段名> order by <用于组内排序的字段名>)

项目使用的去重:​

select * from (select t.*,row_number() over(partition by t.children_id  order by t.update_time DESC) rn       from mdm_data_authority_view_info t where t.DATA_CLASS_ID = '分类id' AND t.DATA_ROLE_ID IN ( '角色id', '角色id' ))              where rn = 1;  

三、总结。

 感谢大家的关注 分享 收藏 看的人越多,表哥推送的就越猛!关注的人越多,表哥的激情更旺盛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heiqi_whf

感觉对同学有帮助就打个赏呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值