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文件存储图文详解
Jun 01 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
mysql联合索引的使用规则
Jun 23 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MySQL系列之一 MariaDB-server安装
Jul 02 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
MySQL 数据表操作
May 04 MySQL
mysql性能优化以及配置连接参数设置
May 06 MySQL
MySQL数据库之存储过程 procedure
Jun 16 MySQL
mysql sock文件存储了什么信息
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登陆页的密码处理方式分享
2013/10/14 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
greybox——不开新窗口看新的网页
2007/02/20 Javascript
url参数中有+、空格、=、%、&amp;、#等特殊符号的问题解决
2013/05/15 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
Javascript基础 函数“重载” 详细介绍
2013/10/25 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:奇迹哥卡尔秀翻全场
2017/03/28 DOTA
浅谈Python爬取网页的编码处理
2016/11/04 Python
详解supervisor使用教程
2017/11/21 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Python csv模块使用方法代码实例
2019/08/29 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
python中列表的含义及用法
2020/05/26 Python
python中字符串的编码与解码详析
2020/12/03 Python
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
幼儿园春季开学寄语
2014/04/03 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
关于工作经历的证明书
2014/10/11 职场文书
资料员岗位职责范本
2015/04/13 职场文书
计算机教师工作总结
2015/08/13 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技