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 28 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
MySQL transaction事务安全示例讲解
Jun 21 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 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中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
Ext.MessageBox工具类简介
2009/12/10 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
详解python中sort排序使用
2019/03/23 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
餐厅考勤管理制度
2014/01/28 职场文书
企业军训感言
2014/02/08 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
酒后驾车标语
2014/06/30 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
Python 绘制多因子柱状图
2022/05/11 Python