mysql进阶篇之去重的三种方法
作者:YXN-sql 阅读量:126 发布日期:2022-10-01
注意的点:distinct只能一列去重,当distinct后跟大于1个参数时,他们之间的关系是&&(逻辑与)关系,只有全部条件相同才会去重
弊端:当查询的字段比较多时,distinct会作用多个字段,导致去重条件增多
select distinct UserName from Table1
2、group by
去重原理:将重复的行进行分组,相同的数据只显示第一行
弊端:使用group by后,所有查询字段都需要使用聚合函数,比较繁琐
select min(age) age from Table1 group by UserName
3、row_number()
row_number() over (parttion by 分组列 order by 排序列)
弊端:需要mysql8.0以后版本才支持窗口函数;对于大量数据的表或复杂的查询语句,可能会导致查询性能下降;其次使用浮点数进行计算时,可能会产生舍入误差,并影响查询结果
去重原理:现根据重复列进行分组,分组后再进行降序排序,不同的组序号为1,相同的组序号为2,排除为2的就达到了去重效果
select * from
(
select *,row_number() over(partition by Res order by Res desc) num from Table1
) A
where A.num=1
YXN-sql
2022-10-01