在使用sql去重的时候,我们经常会遇到表内有重复值的时候,比如我们可以想到的访客浏览量就需要做去重。 在MySql中通常是使用distinct或者分组group by子句,但在支持窗口函数的sql(Hive Sql、Oracle等)中还可以使用rom_number窗口函数可以进行去重。 ### MySQL去重方法一:distinct ```sql select distinct 列名 from 表名 ``` ### MySQL去重方法二:row_number ```sql select *, row_number() over (partition by 想去重的列名 order by 列名) as row_num from 表名 where row_num = 1 ``` ### MySQL去重方法三:group by ```sql select 列名 from 表名 group by 列名 ``` 重复量多时,GROUP BY总的处理效率比DISTINCT高,重复量低时,DISTINCT就比GROUP BY快一点了,而如果随着整体数据量的增加,效果会越来越明显。 大部分场景下 distinct 是特殊的 group by,但二者也有细微的区别,比如它们在查询结果集上、使用的具体业务场景上,以及性能上都是不同的。