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

作者:Python数据开发 时间:2024-01-14 06:54:35 

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

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

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

【字段解释】

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

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

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

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

【解题思路】

方法1:distinct

SQL书写如下:

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

查询结果:

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

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

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

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

方法2:group by

SQL书写如下:

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

查询结果:

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

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 淘宝日销售数据表;

查询结果:

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

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

SQL书写如下:

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

查询结果:

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

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

来源:https://blog.csdn.net/m0_59596937/article/details/130446253

标签:sql,去除,重复,数据
0
投稿

猜你喜欢

  • mysql 控制台程序的提示符 prompt 字符串设置

    2024-01-26 01:42:11
  • Golang编译器介绍

    2024-05-02 16:26:01
  • ASP-server.URLEncode反函数:urldecode

    2008-10-23 16:05:00
  • Python使用pydub模块转换音频格式以及对音频进行剪辑

    2023-03-22 02:17:37
  • Tensorflow2.10实现图像分割任务示例详解

    2021-08-31 13:14:47
  • 一文详解Python中多进程和进程池的使用方法

    2023-12-01 04:10:12
  • 如何基于python实现脚本加密

    2021-10-07 19:23:05
  • python区块链地址的简版实现

    2021-04-02 14:04:21
  • 使用pyinstaller打包PySide2程序中遇到的问题

    2023-02-10 18:23:32
  • python 生成图形验证码的方法示例

    2021-10-01 23:31:03
  • asp 去除最后一个逗号为空字符串的代码

    2010-06-09 19:18:00
  • Python通过2种方法输出带颜色字体

    2023-02-08 20:53:22
  • python清除指定目录内所有文件中script的方法

    2022-04-05 15:59:47
  • 解决MySQL8.0安装第一次登陆修改密码时出现的问题

    2024-01-21 16:19:49
  • Python开发之射击闯关游戏的实现

    2021-03-10 08:37:44
  • 在asp中调用sql server的存储过程方法

    2007-08-13 13:28:00
  • 用Dreamweaver 4.0编制会议通知

    2010-10-20 20:06:00
  • Python的Django框架中的Context使用

    2023-09-19 15:29:24
  • 根据DataFrame某一列的值来选择具体的某一行方法

    2021-01-08 20:33:42
  • vue中使用iframe嵌入网页,页面可自适应问题

    2024-04-26 17:38:24
  • asp之家 网络编程 m.aspxhome.com