SQL去重的3种实用方法总结

 更新时间:2022年10月26日 09:29:57   作者:1024小神  
SQL去重是数据分析工作中比较常见的一个场景,下面这篇文章主要给大家介绍了关于SQL去重的3种实用方法的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下

SQL去重的三种方法汇总​ 

这里的去重是指:查询的时候, 不显示重复,并不是删除表中的重复项

1.distinct去重

注意的点:distinct

只能一列去重,当distinct后跟大于1个参数时,他们之间的关系是&&(逻辑与)关系,只有全部条件相同才会去重

弊端:当查询的字段比较多时,distinct会作用多个字段,导致去重条件增多

select distinct UserResult from Table1

2.group by去重

去重原理:将重复的行进行分组,相同的数据只显示第一行

弊端:使用group by后,所有查询字段都需要使用聚合函数,比较繁琐

select min(UserName)UserName,min(UserSex)UserSex,min(UserSubject)UserSubject,min(UserResult)UserResult from Table1
group by UserResult

3.row_number() over (parttion by 分组列 order by 排序列)

弊端:小孟还不知道

去重原理:现根据重复列进行分组,分组后再进行排序,不同的组序号为1,相同的组序号为2,排除为2的就达到了去重效果

select *from
(
--查询出重复行
select *,row_number() over (partition by UserResult order by UserResult desc)num from Table1
)A
where A.num=1

这里安利第三个,row_number(),稳一些!

补充:SQL根据某列或几列分组去重——row_number() over(partition by)的用法

有时利用SQL进行数据处理会发现,要根据某列或某几列选取信息,由于其他列不同而出现了多次,如运行程序1的结果图1:

程序1:

--程序1:要解决的问题
select a.*
  from AShareEarningEst a
 where a.S_INFO_WINDCODE in ('000650.SZ')
   and a.REPORTING_PERIOD = 20181231
order by a.RESEARCH_INST_NAME,a.EST_DT

我们看到,在AShareEarningEst(中国A股盈利预测明细)表中,共有12人次的证券公司研究员,对000650.SZ(仁和药业)公司的20181231报告期进行预测。例:华泰证券的杨烨辉在20160420、20160428和20160622分别对000650.SZ(仁和药业)发布研究报告进行了预测。现在,我们只需要同一家证券公司的同一个研究员(此处假定同一家证券公司的研究员姓名相同时,即为同一个研究员)做出的最新预测数据,即根据证券公司名称、研究员姓名,同时根据估计日期进行筛选。

此时,可根据row_number() over(partition by)进行处理,运行程序2结果如图2:

程序2:

--程序2:最终解决问题的程序
select b.*
from (select row_number() over(partition by a.RESEARCH_INST_NAME,
              a.ANALYST_NAME order by est_dt desc) as rn,
             --根据RESEARCH_INST_NAME(证券公司名称)和ANALYST_NAME(研究员名字)进行分类,
             --同时根据est_dt(估计日期)倒序排序,即最新日期排在同一分类的上方,此时构建出rn为
             a.*
        from wdzx.AShareEarningEst a
       where a.S_INFO_WINDCODE in ('000650.SZ') --, '000951.SZ', '600006.SH', '600166.SH')
         and a.REPORTING_PERIOD = 20181231) b --将分类后的程序构成表b。可以先运行b的程序观察结果
       where b.rn = 1--运用表b的结果进行子查询,rn=1即为所需结果

此时,即主要利用了row_number() over(partition by)函数筛选出了去重后的结果。

总结

到此这篇关于SQL去重的3种实用方法的文章就介绍到这了,更多相关SQL去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql数据库双机热备难点分析

    Mysql数据库双机热备难点分析

    本文主要给大家介绍了在Mysql数据库双机热备其中的难点分析以及重要环节的经验心得,需要的朋友收藏分享下吧。
    2017-12-12
  • 浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析

    浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析

    MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西。决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们去研究一下,这里的文章只考虑 MyISAM 和InnoDB这两个,因为这两个是最常见的
    2013-06-06
  • 20分钟MySQL基础入门

    20分钟MySQL基础入门

    这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • MySQL 8 新特性之Invisible Indexes

    MySQL 8 新特性之Invisible Indexes

    这篇文章主要介绍了MySQL 8 新特性之Invisible Indexes 的相关资料,需要的朋友可以参考下
    2018-05-05
  • DQL命令查询数据实现方法详解

    DQL命令查询数据实现方法详解

    DQL(Data Query Language,数据查询语言),查询数据库数据,如SELECT语句,简单的单表查询或多表的复杂查询和嵌套查询,数据库语言中最核心、最重要的语句,使用频率最高的语句
    2022-09-09
  • MySql按时,天,周,月进行数据统计

    MySql按时,天,周,月进行数据统计

    这篇文章主要介绍了MySql按时,天,周,月进行数据统计,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL关于sql_mode解析与设置讲解

    MySQL关于sql_mode解析与设置讲解

    今天小编就为大家分享一篇关于MySQL关于sql_mode解析与设置讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • MySQL自增ID耗尽实例讲解

    MySQL自增ID耗尽实例讲解

    这篇文章主要给大家介绍了关于MySQL自增ID耗尽的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • JDBC链接MySQL8的注意事项及说明

    JDBC链接MySQL8的注意事项及说明

    这篇文章主要介绍了JDBC链接MySQL8的注意事项及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • mysql数据库中getshell的方式总结

    mysql数据库中getshell的方式总结

    MySQL版本大于5.0,MySQL 5.0版本以上会创建日志文件,我们通过修改日志文件的全局变量,就可以GetSHELL,下面这篇文章主要给大家介绍了关于mysql数据库中getshell的方式,需要的朋友可以参考下
    2022-07-07

最新评论