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 角色(role)功能介绍
Apr 24 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MYSQL 运算符总结
Nov 11 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
Linux系统下MySQL配置主从分离的步骤
Mar 21 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
Mysql 一主多从的部署
May 20 MySQL
详解Mysql数据库平滑扩容解决高并发和大数据量问题
May 25 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL主从切换的超详细步骤
Jun 28 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
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+java实现自动新闻滚动窗口
2006/10/09 PHP
新闻分类录入、显示系统
2006/10/09 PHP
PHP 表单提交给自己
2008/07/24 PHP
php+javascript的日历控件
2009/11/19 PHP
PHP 万年历实现代码
2012/10/18 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
javascript 继承实现方法
2009/08/26 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
Python Matplotlib库入门指南
2015/05/18 Python
python实现八大排序算法(2)
2017/09/14 Python
通过python爬虫赚钱的方法
2019/01/29 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python imread、newaxis用法详解
2019/11/04 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
幼儿园中班新学期寄语
2014/01/18 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
初中团委工作总结
2015/08/13 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python