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 相关文章推荐
浅析InnoDB索引结构
Apr 05 MySQL
MySQL的join buffer原理
Apr 29 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL系列之十二 备份与恢复
Jul 02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
MySQL批量更新不同表中的数据
May 11 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySql统计函数COUNT的具体使用详解
Aug 14 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中url函数介绍及使用示例
2014/02/13 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
利用php_imagick实现复古效果的方法
2016/10/18 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
2015/08/17 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python中input与raw_input 之间的比较
2017/08/20 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
python RSA加密的示例
2020/12/09 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
连锁酒店店长职责范本
2014/02/13 职场文书
干部现实表现材料
2014/02/13 职场文书
分家协议书范本
2016/03/22 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL