MySQL中使用distinct单、多字段去重方法

news2024/9/30 22:27:40

目录

一、distinct

1.1 只对一个字段查重

1.2多个字段去重

1.3针对null处理

1.4与distinctrow同义

二、聚合函数中使用distinct

三、CONCAT_WS函数


多个字段拼接去重是指将多个字段的值按照一定的规则进行拼接,并去除重复的拼接结果。这样可以生成唯一标识符或者进行数据统计。

一、distinct

distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段
用法注意:

  1. distinct【查询字段】,必须放在要查询字段的开头,即放在第一个参数;
  2. 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
  3. DISTINCT 表示对后面的所有参数的拼接取不重复的记录,即查出的参数拼接每行记录都是唯一的
  4. 不能与all同时使用,默认情况下,查询时返回的就是所有的结果。

1.1 只对一个字段查重

对一个字段查重,表示选取该字段一列不重复的数据。

示例表:psur_list


PLAN_NUMBER字段去重,语句:

SELECT DISTINCT PLAN_NUMBER FROM psur_list;

1.2多个字段去重

对多个字段去重,表示选取多个字段拼接的一条记录,不重复的所有记录

PLAN_NUMBER和PRODUCT_NAME字段去重,语句:

SELECT DISTINCT PLAN_NUMBER,PRODUCT_NAME FROM psur_list;

期望结果:只对第一个参数PLAN_NUMBER取唯一值

解决办法一:使用group_concat 函数

语句:

SELECT GROUP_CONCAT(DISTINCT PLAN_NUMBER) AS PLAN_NUMBER,PRODUCT_NAME from psur_list GROUP BY PLAN_NUMBER

解决办法二:使用group by
语句:

SELECT PLAN_NUMBER,PRODUCT_NAME FROM psur_list GROUP BY PLAN_NUMBER

1.3针对null处理

distinct不会过滤掉null值,返回结果包含null值

表psur_list如下:

对COUNTRY单字段去重,语句:

SELECT DISTINCT COUNTRY FROM psur_list

对COUNTRY多字段去重,语句:

SELECT DISTINCT PRODUCT_NAME,COUNTRY FROM psur_list

1.4与distinctrow同义

语句:

SELECT DISTINCTROW COUNTRY FROM psur_list



二、聚合函数中使用distinct

在聚合函数中DISTINCT 一般跟 COUNT 结合使用。count()会过滤掉null项

SELECT DISTINCT COUNTRY FROM psur_list


语句:

SELECT COUNT(DISTINCT COUNTRY) FROM psur_list

结果如下:【实际包含null项有4个记录,执行语句后过滤null项,计算为3】

例二:多字段

SELECT DISTINCT PRODUCT_NAME,COUNTRY FROM psur_list
//9条

语法:

SELECT COUNT(DISTINCT PRODUCT_NAME,COUNTRY) FROM psur_list

两者都把null行过滤了,注意使用。

三、CONCAT_WS函数

创建测试表
首先,我们需要创建一个测试表来演示多个字段拼接去重的过程。假设我们有一个users表,包含以下字段:

id    name    age    gender
1    Alice    25    Female
2    Bob    30    Male
3    Alice    25    Female
4    Alice    30    Female


我们将使用这个表来进行演示。

使用GROUP_CONCAT函数进行拼接
MySQL提供了GROUP_CONCAT函数,可以用来将一列的值进行拼接。我们可以使用这个函数来实现多个字段的拼接。

下面的示例将演示如何将name和age字段进行拼接,并去重:

SELECT GROUP_CONCAT(DISTINCT CONCAT(name, age) SEPARATOR ',')
FROM users;

运行以上SQL语句,将会返回去重后的拼接结果:

Alice25,Alice30,Bob30


使用CONCAT_WS函数进行拼接
除了GROUP_CONCAT函数,MySQL还提供了CONCAT_WS函数,它可以将多个字段的值进行拼接,并使用指定的分隔符进行分隔。

下面的示例将演示如何将name和age字段进行拼接,并使用逗号作为分隔符:​​​​​​​

SELECT CONCAT_WS(',', name, age)
FROM users
GROUP BY name, age;

运行以上SQL语句,将会返回拼接后的结果:​​​​​​​

Alice,25
Alice,30
Bob,30

去除重复的拼接结果
在上述示例中,我们可以看到,使用GROUP_CONCAT或者CONCAT_WS函数可以将多个字段进行拼接,但是它们并不能去除重复的拼接结果。如果我们需要去除重复的拼接结果,可以使用子查询和DISTINCT关键字来实现。

下面的示例演示了如何使用子查询和DISTINCT关键字来去除重复的拼接结果:​​​​​​​

SELECT DISTINCT CONCAT_WS(',', name, age)
FROM (
    SELECT name, age
    FROM users
    GROUP BY name, age
) AS subquery;

运行以上SQL语句,将会返回去重后的拼接结果:​​​​​​​

Alice,25
Alice,30
Bob,30

参考文章:

【sql】MySQL中使用distinct单、多字段去重方法_mysql distinct 多个字段-CSDN博客

mysql GROUP_CONCAT函数详解-CSDN博客

mysql 多个字段拼接去重(GROUP_CONCAT)_mysql group_concat 去重-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯刷题day10——猜灯谜【算法赛】

一、问题描述 在元宵节的活动现场,有一串环形排列的灯笼,共计 n 个。每个灯笼上伴随着一个谜底以及一个数字,这些数字分别为 a1,a2 ,…,an。 根据元宵节的传统,每个灯笼的谜底都是由相邻两个灯笼上的数字之和得出的。需要注意的…

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

R 生存分析3:Cox等比例风险回归及等比例风险检验

虽然Kaplan-Meier分析方法目前应用很广,但是该方法存在一下局限: 对于一些连续型变量,必须分类下可以进行生存率对比 是一种单变量分析,无法同时对多组变量进行分析 是一种非参数分析方法,必须有患者个体数据才能进行分析 英国…

春秋云境CVE-2023-27179

简介 GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 正文 进入靶场发现没有什么可以利用的地方,那么就按照靶场提示来,直接访问/_admin/imgdownload.php 打开…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来,华为自主研发的鸿蒙操作系统(HarmonyOS)引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破,也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

【SQL】1633. 各赛事的用户注册率(COUNT函数 表达式用法)

题目描述 leetcode题目:1633. 各赛事的用户注册率 Code select contest_id, round(count(*)/(select count(*) from Users)*100, 2) as percentage from Register group by contest_id order by percentage desc, contest_id ascCOUNT()函数 COUNT函数用法&#…

k8s入门到实战(十一)—— DaemonSet详细介绍及使用

DaemonSet 说明 是个 Pod 控制器能够确保 k8s 的所有节点都运行一个相同的 pod 副本,假设这个 pod 名称为 pa 当增加 node 节点时,这个节点会自动创建一个 pa副本当删除 node 节点时,pa 副本会自动删除 删除 daemonset 会删除它们创建的 pod 使用场景 需…

PyQt:实现自定义绘制pyqtgraph折线图中的symbol图标

一、写在前面 1.关于symbol的官方文档说明:symbol 2.我自己绘制的自定义symbol符号,如下图:一个在坐标轴上移动的“小货车” 2.默认可以选择的有以下多种symbol符号 但最后一项也说明了:支持QPainterPath绘制的自定义符号形状。…

案例分析-IEEE 754浮点标准

案例一: 请分析IEEE 754双精度浮点数规格化数的表示范围。 案例二: 规格化浮点数的Bias为什么采用2k-1-1而不是2k-1​?非规范数的指数E1-Bias而不是0-Bias? (1) ① bias 127时 E e - 127 (00…

0.96寸OLED屏调试 ----(一)

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 2、0.96寸OLED显示模块; 备注:专业版、升级版都适用; 首先介绍一下OLED显示模块,SSD1306是一款OLED驱动芯片,拥有最大128*64像素支持&#xff…

卷积变体-----分组卷积、深度可分离卷积、膨胀卷积

文章目录 一、分组卷积1.1 概述1.2 参数量变换 二、深度可分离卷积2.1 概述2.2 计算 三、膨胀卷积 一、分组卷积 1.1 概述 1. 分组卷积(Group convolution )最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不…

Axure中后台系统原型模板,B端页面设计实例,高保真高交互54页

作品概况 页面数量:共 50 页(长期更新) 兼容版本:Axure RP 9/10,不支持低版本 应用领域:网页模板、网站后台、中台系统、B端系统 作品特色 本品为「web中后台系统页面设计实例模板」,默林原创…

聊聊CSS

css 的介绍 学习目标 能够知道css的作用 1. css 的定义 css(Cascading Style Sheet)层叠样式表,它是用来美化页面的一种语言。 没有使用css的效果图 使用css的效果图 2. css 的作用 美化界面, 比如: 设置标签文字大小、颜色、字体加粗等样式。 控制页面布局, 比如…

逐步学习Go-协程goroutine

参考:逐步学习Go-协程goroutine – FOF编程网 什么是线程? 简单来说线程就是现代操作系统使用CPU的基本单元。线程基本包括了线程ID,程序计数器,寄存器和线程栈。线程共享进程的代码区,数据区和操作系统的资源。 线…

jMeter学习

一. JMeter介绍 1. 什么是JMeter? Apache JMeter™ 应用程序是开源软件,一个 100% 纯 Java 应用程序,旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。 2. JMeter能做啥&#x…

RabbitMQ(简单模式)

2种远程服务调用 1openFeign: 优点:能拿到被调用的微服务返回的数据,系统系耦度高,系统稳定。 缺点:同步调用,如果有很多服务需要被调用,耗时长。 MQ,消息队列,RabbitMQ是消息we…

数据可视化-ECharts Html项目实战(8)

在之前的文章中,我们学习了如何设置散点图涟漪效果与仪表盘动态指针效果。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢 今天的文章,会…

标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二)

标定系列——预备知识-OpenCV中实现Rodrigues变换的函数(二) 说明记录 说明 简单介绍罗德里格斯变换以及OpenCV中的实现函数 记录

Machine Learning机器学习之向量机(Support Vector Machine,SVM)

目录 前言 算法提出背景: 核心思想: 原理: 应用领域: 一、支持向量机分类(主要变体) 二、构建常见的支持向量机模型 基于Python 中的 Scikit-learn 库构建线性支持向量机(SVM) 三、向…

蓝桥杯刷题之路径之谜

题目来源 路径之谜 不愧是国赛的题目 题意 题目中会给你两个数组,我这里是分别用row和col来表示 每走一步,往左边和上边射一箭,走到终点的时候row数组和col数组中的值必须全部等于0这个注意哈,看题目看了半天,因为…