目录
1.distinct去重
2.group by去重
3.row_number() over (parttion by 分组列 order by 排序列)
有这么一张test的表, 我们将对这张表进行操作来自验证去重
这里的去重:查询的时候, 不显示重复,并不是删除表中的重复项
1.distinct去重
只能一列去重,当distinct后跟大于1个参数时,他们之间的关系是&&(逻辑与)关系,只有全部条件相同才会去重
弊端:当查询的字段比较多时,distinct会作用多个字段,导致去重条件增多
sql:select DISTINCT score from test
预设结果:80分 90分和100分
2.group by去重
去重原理:将重复的行进行分组,相同的数据只显示第一行
弊端:使用group by后,所有查询字段都需要使用聚合函数,比较繁琐
sql: select min(UserName)UserName,min(gender),min(score)score from test
group by score
看结果:
3.row_number() over (parttion by 分组列 order by 排序列)
去重原理:现根据重复列进行分组,分组后再进行排序,不同的组序号为1,相同的组序号为2,排除为2的就达到了去重效果
sql:
select *from
(
select *,row_number() over (partition by score order by score desc)num from test
)A
where A.num=1
补充: “ROW_NUMBER() OVER (ORDER BY Column1 DESC) 根据Column1 降序排列,再为降序之后的每条数据加上序号
看结果: