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在项目中怎么选事务隔离级别
May 25 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
mysq启动失败问题及场景分析
Jul 15 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
深入理解MySQL中MVCC与BufferPool缓存机制
May 25 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
[JS]点出统计器
2020/10/11 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
javascript去除空格方法小结
2015/05/21 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
浅析vue-router实现原理及两种模式
2020/02/11 Javascript
跟老齐学Python之集合的关系
2014/09/24 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
2015年实习班主任工作总结
2015/04/23 职场文书
婚育证明样本
2015/06/16 职场文书
文艺有韵味的诗句(生命类、亲情类...)
2019/07/11 职场文书