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 11 MySQL
MySQL 可扩展设计的基本原则
May 14 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 MySQL
Mysql 一主多从的部署
May 20 MySQL
sql查询语句之平均分、最高最低分及排序语句
May 30 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySql数据库触发器使用教程
Jun 01 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
MySQL 原理与优化之Update 优化
Aug 14 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/10/09 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
javascript实现密码验证
2015/11/10 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
JavaScript动态检验密码强度的实现方法
2016/11/09 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
教师自我反思材料
2014/02/14 职场文书
教师自我鉴定范文
2014/03/20 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
机关工会工作总结2015
2015/05/26 职场文书
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android
Python+Tkinter打造签名设计工具
2022/04/01 Python