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令人咋舌的隐式转换
Apr 05 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
通过shell脚本对mysql的增删改查及my.cnf的配置
Jul 07 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
MySQL多表查询机制
Mar 17 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
MySQL创建管理KEY分区
Apr 13 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
MySQL存储过程及语法详解
Aug 05 MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
php实现模拟post请求用法实例
2015/07/11 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析
2017/04/13 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
python实现按任意键继续执行程序
2016/12/30 Python
pandas中Timestamp类用法详解
2017/12/11 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python使用Django实现博客系统完整版
2020/09/29 Python
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
安全资料员岗位职责
2013/12/14 职场文书
简历中自我评价范文3则
2013/12/14 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
科长竞争上岗演讲稿
2014/05/12 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
招商银行收入证明
2015/06/17 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书