SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)

 更新时间:2023年05月05日 15:26:55   作者:Python数据开发  
以某电商公司的销售报表为例,常见的去重方法我们用到distinct 或者group by 语句, 今天介绍一种新的方法,利用窗口函数对数据去重,感兴趣的朋友跟随小编一起看看吧

使用SQL对数据进行提取和分析时,我们经常会遇到数据重复的场景,需要我们对数据进行去重后分析。

以某电商公司的销售报表为例,常见的去重方法我们用到distinct 或者group by 语句, 今天介绍一种新的方法,利用窗口函数对数据去重。

【字段解释】

访客id:进入店铺浏览宝贝的客户

浏览时间:访客进入店铺浏览页面的日期

浏览时常:访客进入店铺浏览页面的时长

现在需要知道店铺里每个访客和对应的浏览日期(每个访客同一天浏览多次算做一次记录)

【解题思路】

方法1:distinct

SQL书写如下:

select distinct 访客id ,浏览时间 
     from 淘宝日销售数据表;

查询结果:

这里用distinct语句多字段进行去重的时候,需要特别注意2点:

1)distinct语法规定对单字段、多字段去重,必须放在第一个查询字段前。

2)如果对表中多列字段进行去重,去重的过程就是将多字段作为整体去重,比如上面的例子,我们将访客id和浏览时间为整体去去重,而不是对访客id单独去重后再对姓名单独去重,所以会出现相同的访客id对应不同的浏览时间。

方法2:group by

SQL书写如下:

select 访客id ,浏览时间
     from 淘宝日销售数据表
group by 访客id ,浏览时间;

查询结果:

group by对访客id 和浏览时间进行分组,分组汇总后改变了表的行数,一行只有一个类别,这里使用group by后会将访客id 和浏览时间作为一个类别保留,重复的就会不显示。

方法3:窗口函数

使用窗口函数进行去重时,比distinct和group by稍微复杂些,窗口函数不会减少原表中的行数,而是对字段进行分组后排序。详细的窗口函数讲解

窗口函数的基本语法如下:

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)

根据题目要求得出每个访客和对应的浏览日期,我们对访客id ,浏览时间进行分组,对浏览时长(秒)进行排序。

SQL书写如下:

select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
     from 淘宝日销售数据表;

查询结果:

窗口函数查询按照每个客户和浏览日期分组,如果同一天有几次浏览,会根据点赞数排序,筛选排名为1,即可得出每个访客和对应的浏览日期。

SQL书写如下:

select 访客id ,浏览时间 ,row_number()over(partition by 访客id ,浏览时间
order by 浏览时长(秒)) as 排名
     from 淘宝日销售数据表;

查询结果:

去除重复项的三种操作,你get了吗?欢迎评论区补充你的去重办法~

到此这篇关于SQL中去除重复数据的几种方法,我一次性都告你​的文章就介绍到这了,更多相关sql去除重复数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows 11安装SQL Server 2019出现"等待数据库引擎恢复句柄失败"问题完美解决方案

    Windows 11安装SQL Server 2019出现"等待数据库引擎恢复句

    这篇文章主要介绍了Windows 11安装SQL Server 2019出现"等待数据库引擎恢复句柄失败"问题完美解决方案,解决方案很简单,格式化您的硬盘,删除分区并重新指定扇区大小,本文给大家介绍的非常详细,需要的朋友参考下吧
    2023-07-07
  • SqlDateTime溢出该怎么解决

    SqlDateTime溢出该怎么解决

    这篇文章主要介绍了SqlDateTime溢出该怎么解决的相关资料,需要的朋友可以参考下
    2015-11-11
  • sqlserver数据库规模膨胀太大怎么优化

    sqlserver数据库规模膨胀太大怎么优化

    数据库规模膨胀是SQLServer数据库运维中常见的问题之一,本文介绍了一些缓解膨胀问题的方法,包括增加内存、数据压缩、数据库分区等,在实践过程中,应根据具体情况,采取适当的方法,以达到最优的缓解膨胀问题的效果
    2024-02-02
  • SQL Server 服务器优化技巧浅谈

    SQL Server 服务器优化技巧浅谈

    数据文件和日志文件的操作会产生大量的I/O。在可能的条件下,日志文件应该存放在一个与数据和索引所在的数据文件不同的硬盘上以分散I/O,同时还有利于数据库的灾难恢复。
    2010-03-03
  • SQL Server删除重复数据只保留一条的实现步骤

    SQL Server删除重复数据只保留一条的实现步骤

    在进行数据处理和数据分析的过程中,我们经常会遇到重复记录的问题,重复记录可能会导致数据不准确,也会增加数据处理的工作量,这篇文章主要给大家介绍了关于SQL Server删除重复数据只保留一条的实现步骤,需要的朋友可以参考下
    2024-01-01
  • java 连接sql server2008数据库配置

    java 连接sql server2008数据库配置

    本篇文章给大家分享java连接sql server2008数据库配置的相关资料,需要的朋友可以参考下
    2015-09-09
  • 教你轻松恢复/修复SQL Server的MDF文件

    教你轻松恢复/修复SQL Server的MDF文件

    下面将主要讨论一下后者的备份与恢复。本文假定您 能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器)
    2013-11-11
  • Sqlserver 存储过程中结合事务的代码

    Sqlserver 存储过程中结合事务的代码

    Sqlserver 存储过程中使用事务
    2010-06-06
  • sql实现split函数的脚本

    sql实现split函数的脚本

    这篇文章主要介绍了sql实现split函数的脚本,大家参考使用吧
    2013-11-11
  • 浅析SQL Server中包含事务的存储过程

    浅析SQL Server中包含事务的存储过程

    数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。那么在存储过程里添加事务,则可以保证该事务里的所有sql代码要么完全执行要么完全不执行。
    2014-08-08

最新评论