sql去重的多种方式,sql语句 去重,SQL去重方法汇总

sql去重的多种方式,sql语句 去重,SQL去重方法汇总

本文主要分享SQL重复数据删除方法的总结。在使用SQL提取数据时,我们经常会遇到表中的重复值。例如,如果我们想要获得uv(独立访问者),我们需要进行重复数据删除。我们来看看减肥的方法。

在使用SQL提取数据时,我们经常会遇到表中的重复值。例如,如果我们想要获得uv(独立访问者),我们需要进行重复数据删除。

在Mysql中,通常使用distinct或group by子句,但在支持窗口函数的sql(如Hive SQL、Oracle等)中。),row_number窗口函数也可用于重复数据删除。

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

备注:

Task_id:任务id;Order_id:订单id;开始时间:开始时间

注意

:一个任务对应多个订单。

我们需要找到任务的总数,因为task_id不是唯一的,所以我们需要消除重复:

distinct

-列出task_id的所有唯一值(重复数据删除后的记录)

选择不同的任务标识

来自任务;

-任务总数

选择计数(不同任务标识)任务编号

来自任务;

Distinct通常效率很低。它不适合显示重复数据删除后的具体值,通常与count一起使用来计算条形数。

当使用distinct时,它被放置在select之后,并且它后面的所有字段的值被统一进行重复数据消除。例如,如果distinct之后有两个字段,则两条记录1,1和1,2不是重复值。

group by

-列出task_id的所有唯一值(重复数据删除后的记录,null也是一个值)

-选择任务标识

-来自任务

-按任务标识分组;

-任务总数

选择计数(任务标识)任务编号

从(选择任务标识

来自任务

group by task _ id)tmp;

row_number

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

Row_number() over(按字段名分区用于分组,按字段名排序用于组内排序)

其中可以省略部分分割。

-在支持窗口函数的sql中使用

select count(rn=1时的情况,然后task_id否则为空结束)task_num

从(选择任务标识

,row_number() over(按task_id分区,按start_time排序)rn

来自任务)tmp

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

-底部的分号;用于分隔行。

选择不同的用户标识

来自测试;-返回1;2

选择不同的用户标识、用户类型

来自测试;-返回1,1;1, 2;2, 1

选择用户标识

来自测试

按用户标识分组;-返回1;2

选择用户标识,用户类型

来自测试

group by user_id,user _ type-返回1,1;1, 2;2, 1

选择用户标识,用户类型

来自测试

按用户标识分组;

- Hive,Oracle等。将报告错误。mysql可以这样写。

-返回1,1或1,2;2,1(共两行)。只有group by之后的字段才会重复,也就是说最终返回的记录数等于前面sql中的记录数,也就是两条记录。

-未放在group by之后但放在select中的字段将只返回一条记录(就好像它通常是第一条记录,这应该是不规则的)

这就是这篇关于SQL重复数据消除方法概述的文章。有关SQL重复数据删除方法的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

sql去重的多种方式,sql语句 去重,SQL去重方法汇总