sql中三种去重的方式_三种重采样方法的特点

sql中三种去重的方式_三种重采样方法的特点点击关注上方“逆锋起笔”,设为“置顶或星标”,第一时间送达干货blog.csdn.net/xienan_ds_zj/article/details/103869048作者:程序员的成长之路…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺


点击关注上方“逆锋起笔”,


设为“置顶或星标”,第一时间送达干货

blog.csdn.net/xienan_ds_zj/article/details/103869048

作者:程序员的成长之路

SQL去重是数据分析工作中比较常见的一个场景,今天给大家具体介绍3种去重的方法。

在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重。

在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 sql(如Hive SQL、Oracle等等) 中还可以使用 row_number 窗口函数进行去重。

举个栗子,现有这样一张表 task:

13fe7bac6a455bc8d0a830ee2e72559d.png

备注:

  • task_id: 任务id;

  • order_id: 订单id;

  • start_time: 开始时间

注意:一个任务对应多条订单

我们需要求出任务的总数量,因为 task_id 并非唯一的,所以需要去重:

distinct

-- 列出 task_id 的所有唯一值(去重后的记录)
-- select distinct task_id
-- from Task;

-- 任务总数
select count(distinct task_id) task_num
from Task;

distinct 通常效率较低。它不适合用来展示去重后具体的值,一般与 count 配合用来计算条数。

distinct 使用中,放在 select 后边,对后面所有的字段的值统一进行去重。比如distinct后面有两个字段,那么 1,1 和 1,2 这两条记录不是重复值 。

group by

-- 列出 task_id 的所有唯一值(去重后的记录,null也是值)
-- select task_id
-- from Task
-- group by task_id;

-- 任务总数
select count(task_id) task_num
from (select task_id
      from Task
      group by task_id) tmp;

row_number

row_number 是窗口函数,语法如下:

row_number() over (partition by <用于分组的字段名> order by <用于组内排序的字段名>)

其中 partition by 部分可省略。

-- 在支持窗口函数的 sql 中使用
select count(case when rn=1 then task_id else null end) task_num
from (select task_id
       , row_number() over (partition by task_id order by start_time) rn
   from Task) tmp;

此外,再借助一个表 test 来理理 distinct 和 group by 在去重中的使用:

7966af2240bb3db8712a5059cf83fecc.png

-- 下方的分号;用来分隔行
select distinct user_id
from Test;    -- 返回 1; 2

select distinct user_id, user_type
from Test;    -- 返回1, 1; 1, 2; 2, 1

select user_id
from Test
group by user_id;    -- 返回1;  2

select user_id, user_type
from Test
group by user_id, user_type;    -- 返回1, 1; 1, 2; 2, 1

select user_id, user_type
from Test
group by user_id;    
-- Hive、Oracle等会报错,mysql可以这样写。
-- 返回1, 1 或 1, 2 ; 2, 1(共两行)。只会对group by后面的字段去重,就是说最后返回的记录数等于上一段sql的记录数,即2条
-- 没有放在group by 后面但是在select中放了的字段,只会返回一条记录(好像通常是第一条,应该是没有规律的)

逆锋起笔是一个专注于程序员圈子的技术平台,你可以收获最新技术动态最新内测资格BAT等大厂的经验精品学习资料职业路线副业思维,微信搜索逆锋起笔关注!

又一本 Python 可视化好书来了!

GitHub 人脸属性编辑神器横空出世!

代码生成器用起来,是真的爽~

一次完整的 Http 请求过程

一本免费的深度学习漫画书



8d8c86a0c7ccc277546fe6ac1c32c673.png

更多精彩内容,请关注「数据前线」

记得点「赞」「在看」

爱你们587c035047dcf743355fde33258b7a58.png 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/192259.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android json字符串转Map

    Android json字符串转Map今天,同事问我json的问题。遍历json数组,解决完以后。我想到了json转Map这个问题。写一下,发现效果还行那个发上来看看吧。如果想省事的话,用阿里的FastJson我感觉也是不错的,网上教程很多,我就不多说了。注意这是Android自带的json包importorg.json.JSONArray;importorg.json.JSONException;importo…

    2022年6月21日
    226
  • redis 主从架构(sizeof函数怎么计算)

    一.绪论   Redis的复制功能是基于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生。   当Slave启动并连接到Master之后,它将主动发送一个SYNC命令(首先Master会启动一个后台进程,将数据快照保存到文件中[rdb文件]Master会…

    2022年4月12日
    33
  • vb.net python哪个好_VS VB

    vb.net python哪个好_VS VBPublicClassForm1   PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load       get_CPU_info()       get_net_info()       get_op_info()       get

    2022年9月27日
    0
  • java怎样调用oracle存储函数_oracle如何调用存储过程

    java怎样调用oracle存储函数_oracle如何调用存储过程之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧。首先来看一下项目结构:在数据库创建存储过程的脚本,假如,使用的是本地的oracle数据库,那么,就需要开启服务-OracleOraDb11g_home1TNSListener和OracleServiceORCL。实现:输入用户的工号,输出用户名字、薪水以及工作:createorr…

    2022年10月20日
    0
  • 传感器开发流程!_传感器工艺流程

    传感器开发流程!_传感器工艺流程今天公司要求我进行传感器的开发,而且只给2天时间,反映下自己没做过这方面可能需要时间延长下,不管,就给你两天时间!干不完就使劲加班…现在企业压榨劳动力太赤裸裸了

    2022年9月29日
    0
  • CSS媒体查询_css网页

    CSS媒体查询_css网页媒体查询可以让我们根据设备显示器的特性(如视口宽度、屏幕比例、设备方向横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成。媒体查询中可用于检测的媒体特性有width、height和color(等)。使用媒体查询,可以在不改变页面内容的情况下,为特定的一些输出设备定制显示效果。媒体查询与弹性盒布局的适用情况媒体查询当页面的结构发生变化的话最好使用媒体查询。​弹性盒如果只是宽高的变化,尽量使用弹性盒。…

    2022年10月22日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号