SQL去重

article/2025/10/23 15:13:01

SQL去重是数据分析工作中比较常见的一个场景,今天给大家具体介绍3种去重的方法。在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重。

 

在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 sql(如Hive SQL、Oracle等等) 中还可以使用 row_number 窗口函数进行去重。举个栗子,现有这样一张表 task:

b45c010d0ff74386adabe7fe8532144f.jpg

 

备注:

task_id: 任务id;

order_id: 订单id;

start_time: 开始时间

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

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

 

1. 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 这两条记录不是重复值 。

 

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;

3. row_number

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

 

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

 

其中 order 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;  

4. distinct 和 group by 的使用

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

 

d20a5afdb7fc49fcb31fffb40f848345.jpg

 

-- 下方的分号;用来分隔行

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


http://chatgpt.dhexx.cn/article/R9DhIHS5.shtml

相关文章

SQL查询去掉重复数据

本文主要总结数据库去掉重复数据的方法 去掉重复数据的方法&#xff1a; 第一种&#xff1a;distinct 根据单个字段去重&#xff0c;能精确去重&#xff1b;作用在多个字段时&#xff0c;只有当这几个字段的完全相同时&#xff0c;才能去重&#xff1b;关键字distinct只能放…

大数据系统基础 | 绪论

1 什么是大数据 1、Big data is an all-encompassing term for any collection of data sets so large and complex that it becomes difficult to process using traditional data processing apllications. -http://en.wikipedia.org/wiki/Big_data 2、如果一个数据集的规…

大数据测试

目录 1、前言 2、大数据测试策略 3、如何测试大数据应用程序 4、架构测试 5、性能测试 6、性能测试方法 7、性能测试参数 8、测试环境需求 9、大数据测试对比传统数据库测试 10、大数据场景中使用的工具 11、大数据测试的挑战 12、性能测试挑战 1、前言 大数据…

大数据系统测评服务

1. 专业服务 围绕大数据的基础平台、分析软件产品、大数据应用系统、大数据交易系统等&#xff0c;面向政府主管机构、大数据解决方案提供商和大数据建设需求方等提供支撑、测试和咨询服务。测试报告可作为大数据产品或系统市场推广或验收提供客观依据。 大数据基础平台测试…

大数据系统发展的技术路线

自从大数据出来后&#xff0c;数据管理界发生了巨大的变化&#xff0c;技术驱动成为大数据管理系统的一个主要变革力量。 传统的数据库管理系统以结构化数据为主&#xff0c;因此关系数据库系统&#xff08;RDBMS&#xff09;可以一统天下满足各类应用需求。然而&#xff0c;大…

大数据平台开发:大数据系统架构模块解析

企业要开展大数据相关业务&#xff0c;首先就需要基于自身的需求&#xff0c;来设计搭建数据系统平台。而大数据系统平台的搭建&#xff0c;需要基于实际需求&#xff0c;来进行系统架构规划。今天我们就从大数据平台开发的角度&#xff0c;来对大数据系统架构模块做一个简单的…

大数据画像系统-1.0

大数据画像系统-1.0 写在最前面操作流程与资源资源获取创建 Flask 工程添加必要第三方库将刚刚下载的文件放入 Flask 工程运行 效果首页城市数据页个人画像页 结语 写在最前面 你能找到这篇文章&#xff0c;那么画像系统是什么&#xff0c;你应该已经知道&#xff0c;大数据是…

【云计算与大数据技术】大数据系统总体架构概述(Hadoop+MapReduce )

一、总体架构设计原则 企业级大数据应用框架需要满足业务的需求&#xff0c;一是要求能够满足基于数据容量大&#xff0c;数据类型多&#xff0c;数据流通快的大数据基本处理需求&#xff0c;能够支持大数据的采集&#xff0c;存储&#xff0c;处理和分析&#xff0c;二是要能…

大数据系统计算技术展望

大数据是新一代信息技术的核心方面和竞争前沿&#xff0c;也是制约大数据产业快速发展的关键瓶颈。大数据技术创新能力已经成为后信息时代衡量国家竞争力的重要指标。与传统信息产业的发展过程相似&#xff0c;大数据必将逐渐形成一个相对独立、体系完善的产业形态&#xff0c;…

什么是大数据系统架构

大数据的应用开发过于偏向底层&#xff0c;具有学习难度大&#xff0c;涉及技术面广的问题&#xff0c;这制约了大数据的普及。现在需要一种技术&#xff0c;把大数据开发中一些通用的&#xff0c;重复使用的基础代码、算法封装为类库&#xff0c;降低大数据的学习门槛&#xf…

大数据系统的基础,大数据存储和计算技术

在存储方面&#xff0c;2000 年左右谷歌等提出的文件系统(GFS)、以及随后的 Hadoop 的分布式文件系统 HDFS(Hadoop Distributed File System)奠定了大数据存储技术的基础。 与传统系统相比&#xff0c;GFS/HDFS 将计算和存储节点在物理上结合在一起&#xff0c;从而避免在数据…

大数据系统架构的基本介绍

从数据处理的一般流程可以看到&#xff0c;在大数据环境下需要的关键技术主要针对海量数据的存储和海量数据的运算。传统的关系数据库经过近40年的发展已经成为了一门成熟同时仍在不断演进的数据管理和分析技术&#xff0c;结构化查询语言&#xff08;SQL&#xff09;作为存取关…

大数据系统开发综合实践(一)

又来了新的任务&#xff0c;需要学习一些大数据开发的相关操作&#xff0c;其实之前学过一些内容&#xff0c;但是当初没有好好学&#xff0c;现在还得重新学习起来。 大数据系统中各种模块的作用 HDFS&#xff1a;分布式文件系统&#xff0c;用来存储数据 YARN&#xff1a;用…

大数据系统体系架构(含图示)

目录 1 大数据体系架构图2 数据采集层3 数据计算层4 数据服务层5 数据应用层 1 大数据体系架构图 2 数据采集层 阿里的的日志采集包括两大体系&#xff1a; Aplus.JS是Web端的日志采集技术方案&#xff0c;UserTrack是APP端的日志采集技术方案&#xff1b;在采集技术基础上&am…

大数据系统基础

注&#xff1a;本文是学习由清华大学王建明等老师的公开课大数据系统的笔记。 大数据系统基础 绪论 1、什么是大数据 我们的生活无时无刻不在产生着数据&#xff0c;那是什么在处理这些庞大的数据呢&#xff1f; 1、大数据的定义&#xff1f; 大数据(big data)&#xff0c…

大数据系统架构

大数据系统大体可以分成以下四个部分&#xff1a; 1&#xff0c;数据采集层 2&#xff0c;数据计算层 3&#xff0c;数据服务层 4&#xff0c;数据应用层 下图是阿里巴巴大数据系统架构图&#xff1a; 一、数据采集层 数据采集主要分成以下三块数据&#xff1a; 1&#xff0c…

大数据系统及分析

IDC将大数据技术定义为&#xff1a;“为更经济地从高频率的、大容量的、不同结构和类型的数据中获取价值而设计的新一代架构和技术。” 大数据的关键在于种类繁多、数量庞大、使用传统的数据分析工具无法在可容忍的时间内处理相应的数据。大数据分析主要涉及两个不同的领域&…

大数据测试之大数据系统及特点

一、大数据系统简介 扫健康码了没&#xff1f;相信大家每天都会不厌其烦地听到这种询问。 支付宝付款&#xff0c;相信大家也是每天都在扫码付款&#xff0c;这已经成为了生活的一部分。 这些能产生非常巨量数据的应用系统&#xff0c;我们称之为大数据系统。 大数据系统还需要…

QMap与Json相互转换

在Qt中可以用QJsonDocument、QJsonParseError、QJsonObject、QJsonArray、QJsonValue等类来解析json数据&#xff0c;但这种解析有时比较麻烦&#xff0c;代码量也比较多&#xff0c;其实也可以用QMap来解析Json数据&#xff0c;并且QMap和Json可以 相互转换&#xff0c;下面来…

QMap 和 QHash容器

QMap类、 QHash类 QMap与QHash差别&#xff1a; ①QHash比QMap查找速度更快。 ②QHash以任意顺序存储&#xff0c;QMap以Key顺序存储数据。 ③QHash的Key必须提供operator()及一个全局的qHash(Key)函数&#xff0c;而QMap的Key必须提供operator<()函数。 存储一键多值数据时…