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

目录

一、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, ageFROM usersGROUP 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.mzph.cn/news/787658.shtml

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

相关文章

【中大厂前端面试百问】这不迷死你?

写在前面 最近收到很多同行的抱怨,前端开发高级还行,对初中级最难过的不是面试过不去,而是“已读不回”,来自某聘的梗,确实是,初中级因为坑位较少,很多HR在专心招聘的时候都未必能让所有投简历…

TikTok账号为什么被封?如何防止被封?

多人在使用TikTok的过程中都会遇到一些问题,比如为什么TikTok没有浏览量?事实上,这很可能是因为你的账号已被禁止。但为什么它会被封呢?你怎样才能解决它? 一、TikTok账号为什么被封? 1、什么是 TikTok 影…

TikTok账号封号原因是什么?全面攻略

多人在使用TikTok的过程中都会遇到一些问题,比如为什么TikTok没有浏览量?事实上,这很可能是因为你的账号已被禁止。但为什么它会被封呢?你怎样才能解决它? 一、TikTok账号为什么被封? 1、什么是 TikTok 影…

本地项目提交到远程服务器的git流程

初入职场的开发小白或多或少都会遇到一些使用git来管理项目的问题,这里给大家浅浅的总结一下大致的提交流程 具体步骤如下: 将当前目录下的所有修改的文件添加到暂存区 git add .提交暂存区文件到本地仓库中 描述的内容就是你本次提交的一些相关说明 …

数据结构与算法(2)顺序表的初始化、插入、打印、删除、查找元素——C语言版

目录 1.前言 2.头文件的定义 3.菜单栏的设置 4.顺序表的初始化 5.添加元素 6.打印元素 7.查找元素 8.删除元素 9.插入元素 10.主函数 11.完整的代码实现 1.前言 数据结构包括三个方面 逻辑结构存储结构运算 而线性表有两种典型的存储结构 顺序存储结构链式存储结构 具体关系可…

idea端口占用

报错:Verify the connector‘s configuration, identify and stop any process that‘s listening on port XXXX 翻译: 原因: 解决: 一、重启大法 二、手动关闭 启动spring项目是控制台报错,详细信息如下&#xff…

openGauss 访问控制模型

访问控制模型 可获得性 本特性自openGauss 1.1.0版本开始引入。 特性简介 管理用户访问权限,为用户分配完成任务所需要的最小权限。 客户价值 客户依据自身需求创建对应的数据库用户并赋予相应的权限给操作人员,将数据库使用风险降到最低。 特性描…

Compose Navigation导航使用的部分注意事项

文章目录 一、前言二、使用判断条件进行显示隐藏和Navigation的区别三、Navigation和ViewModel的关系四、Navigation中替换页面的方式 一、前言 在Android的项目架构中有一种由单个Activity,多个页面组成的架构。页面之前是由Fragment来承载显示,现在可…

Photoshop 2024 Mac/win---图像处理的新纪元,解锁无限创意

Photoshop 2024是一款功能强大的图像处理软件,以其卓越的性能和广泛的应用领域,赢得了设计师、摄影师、图形艺术家等各类创意工作者的青睐。它提供了丰富的绘画和编辑工具,让用户能够轻松进行图片编辑、合成、校色、抠图等操作,实…

【0day】号卡sql注入

漏洞描述 号卡系统一键即可便捷快速的为您自己打造一个独立的属于你的号卡分销商城。此系统某接口存在SQL注入漏洞。 fofa语句 icon_hash"-795291075" 漏洞复现 构造payload nuclei验证 pocsuite3 验证 verify 验证 attack 验证 github poc总汇地址&#xff1a…

SpringBoot:自定义线程池配置类

文章目录 一、前言二、案例展示1、初始版本2、代码审核意见和优化建议3、潜在问题和风险4、优化建议5、优化后的代码 三、具体使用 一、前言 有时候我们在项目中做一些长链路的跑批任务时,基于Springboot项目的定时任务,我们可以指定一个自定义的线程配…

无极低码:同时删除两张表中的记录

原始需求:删除两张表用户id为44的数据记录 删除user_info表中u_id为44的用户 DELETE FROM user_info WHERE u_id 44; 删除user_org_rel 表中u_id为44的用户 DELETE FROM user_org_rel WHERE u_id 44; 简便写法:用工mysql写法一次执行两张表删除 &…

深入理解WebSocket:实时双向通信的利器

一、介绍 1.1 基础概念介绍 单工通信:数据传输只允许在一个方向上传输,只能一方发送数据,另一方接收数据并发送。半双工:数据传输允许两个方向上的传输,但在同一时间内,只可以有一方发送或接收数据。全双…

SpringBoot集成Mysql

一、概述 Spring Boot是一个用于简化Spring应用开发的框架,它提供了很多默认配置,使得开发者能够快速地集成各种技术和组件,包括MySQL数据库。在Spring Boot中集成MySQL,我们通常会使用Spring Data JPA或MyBatis等持久层框架&…

Python中的全栈开发前端与后端的完美融合【第160篇—全栈开发】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的全栈开发:前端与后端的完美融合 全栈开发已成为当今软件开发领域中的…

代克斯特拉演算法C代码

代克斯特拉演&#xff08;Dijkstra&#xff09;算法是一个用于找出图中单源最短路径问题的算法。下面是一个使用C语言实现的Dijkstra算法的例子。这个例子假定图是以邻接矩阵的形式表示的&#xff0c;并且图中的边权重是非负的。 #include <stdio.h> #include <limit…

华为OD机试 - 查找舆情热词(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

vue3性能提升主要通过哪几方面?

&#x1f4dd;个人主页&#xff1a;爱吃炫迈 &#x1f48c;系列专栏&#xff1a;Vue &#x1f9d1;‍&#x1f4bb;座右铭&#xff1a;道阻且长&#xff0c;行则将至&#x1f497; 文章目录 编译优化diff算法优化提取动态节点 静态提升预字符串化缓存内联事件处理函数SSR优化 源…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/1]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

Python高级技术应用:解锁异步编程的威力与实践

在当今软件开发的领域中,异步编程已经成为一种重要的技术手段,特别是在处理高并发和I/O密集型任务时。Python作为一种功能丰富且灵活的编程语言,提供了多种方式来实现异步编程,如使用asyncio库、async/await关键字等。本文将深入探讨Python中异步编程的原理、优势以及实际应…