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


Posted in MySQL onMay 08, 2023

使用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了吗?欢迎评论区补充你的去重办法~

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

MySQL 相关文章推荐
教你用eclipse连接mysql数据库
Apr 22 MySQL
MySQL 分组查询的优化方法
May 12 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
.Net Core导入千万级数据至Mysql的步骤
May 24 MySQL
Mysql 设置boolean类型的操作
Jun 04 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
MySQL安装失败的原因及解决步骤
Jun 14 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 MySQL
MySQL远程无法连接的一些常见原因总结
Sep 23 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 #MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 #MySQL
MySQL数据管理操作示例讲解
Dec 24 #MySQL
MySQL深分页问题解决思路
Dec 24 #MySQL
DQL数据查询语句使用示例
Dec 24 #MySQL
mysql数据库如何转移到oracle
Dec 24 #MySQL
mysql序号rownum行号实现方式
Dec 24 #MySQL
You might like
php实现的在线人员函数库
2008/04/09 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
JS控制GIF图片的停止与显示
2019/10/24 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
公众号SVG动画交互实战代码
2020/05/31 Javascript
python实现telnet客户端的方法
2015/04/15 Python
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python 中split 和 strip的实例详解
2017/07/12 Python
python的socket编程入门
2018/01/29 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
车间主管岗位职责
2013/11/14 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
趣味运动会活动方案
2014/02/12 职场文书
2016猴年春节问候语
2015/11/11 职场文书
电工实训心得体会
2016/01/14 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
教你用python实现12306余票查询
2021/06/30 Python