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 相关文章推荐
MySQL基础(二)
Apr 05 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
解析MySQL索引的作用
Mar 03 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
讲解MySQL增删改操作
May 06 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 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开发入门教程之面向对象
2006/12/05 PHP
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
2020/04/21 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
利用Python计算KS的实例详解
2020/03/03 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
意大利值得信赖的在线超级药房:PillolaStore
2020/02/05 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
总务岗位职责
2013/11/19 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
班组长安全工作职责
2014/07/15 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
村干部任职承诺书
2015/01/21 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
体育教师研修感悟
2015/11/18 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技