SQL去重方法汇总

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

更多教程请到友情连接: 菜鸟教程https://www.piaodoo.com

茂名一技http://www.enechn.com

ppt制作教程步骤 http://www.tpyjn.cn

兴化论坛http://www.yimoge.cn

电白论坛 http://www.fcdzs.com


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

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

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

备注:

  • 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 在去重中的使用:

-- 下方的分号;用来分隔行
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中放了的字段,只会返回一条记录(好像通常是第一条,应该是没有规律的)

到此这篇关于SQL去重方法汇总的文章就介绍到这了,更多相关SQL去重方法内容请搜索菜鸟教程www.piaodoo.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程www.piaodoo.com!


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

相关文章

SQL中去除重复数据的几种方法,我一次性都告诉你​

使用SQL对数据进行提取和分析时&#xff0c;我们经常会遇到数据重复的场景&#xff0c;需要我们对数据进行去重后分析。 以某电商公司的销售报表为例&#xff0c;常见的去重方法我们用到distinct 或者group by 语句&#xff0c; 今天介绍一种新的方法&#xff0c;利用窗口函数对…

SQL:数据去重的三种方法

1、使用distinct去重 distinct用来查询不重复记录的条数&#xff0c;用count(distinct id)来返回不重复字段的条数。用法注意&#xff1a; distinct【查询字段】&#xff0c;必须放在要查询字段的开头&#xff0c;即放在第一个参数&#xff1b;只能在SELECT 语句中使用&#…

SQL去重的三种方法汇总​

SQL去重的三种方法汇总​ 这里的去重是指&#xff1a;查询的时候, 不显示重复&#xff0c;并不是删除表中的重复项 1.distinct去重 注意的点&#xff1a;distinct 只能一列去重&#xff0c;当distinct后跟大于1个参数时&#xff0c;他们之间的关系是&&(逻辑与)关系&a…

SQL去重

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

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…