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, 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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖店找达人带货,能赚钱吗?了解达人的这些特征!出单其实很简单

哈喽~我是电商月月 把抖音小店做起来的人都说,抖音小店前期出单最好的方式只有达人带货 那为什么还有那么多新手朋友确实找达人带货了,仍是不赚钱,不出单呢? 原因只有两点: 要么是你的品不好,要么就是你…

YOLOv7 | 注意力机制 | 添加ECA注意力机制

目录 原理简介 代码实现 yaml文件实现(tips:可以添加不同的位置) 检查是否添加执行成功 完整代码分享 论文创新必备(可帮忙做实验) 启动命令 ECA是通道注意力机制的一种实现形式,是基于SE的扩展。…

基于工业以太网的电能计量管理系统的应用

摘要:针对目前工业电能模式的研究现状,本文阐述了在现代以太网基础上的电能管理系统的设计。 该系统实现了电能的远程实时监控与管理,并且该系统支持多种终端设备的远程访问,建立了一个实时的人机界面管理平台,实现对电…

Web CSS笔记2

目录 1、背景 ①、背景图片(image) ②、背景平铺(repeat) ③、背景位置(position) ④、背景附着(attachment) ⑤、背景透明(CSS3) ⑥、背景图片缩放大小(size): ⑦、背景简写 2、标签显…

全国1000米分辨率逐年植被覆盖度(FVC)数据集

本数据集包括2000年至今,全国逐年植被覆盖度数据,FVC范围值为0-1,数据为浮点型,GeoTIFF格式。GeoTIFF文件均可用ArcGIS软件和GDAL读取和打开。 植被覆盖度是指植被(包括叶、茎、枝)在地面的垂直投影面…

【CXL协议-事务层之CXL.cache (3)】

3.2 CXL.cache 3.2.1 概述 CXL.cache 协议将设备和主机之间的交互定义为许多请求,每个请求至少有一个关联的响应消息,有时还有数据传输。 该接口由每个方向的三个通道组成: 请求、响应和数据。 这些通道根据其方向命名,D2H&…

Llama模型下载

最近llama模型下载的方式又又变了,所以今天简单更新一篇文章,关于下载的,首先上官网,不管在哪里下载你都要去官网登记一下信息:https://llama.meta.com/llama2 然后会出现下面的信息登记网页: 我这里因为待…

【unity】认识unity Hub的主要功能

这里我们主要讲解unity Hub中的【项目】和【安装】功能,其他对应的功能栏相信大家根据文字就可以知道相应的作用。 首先是介绍【项目】功能,在这里我们可以创建本地项目和云端项目,作为初学者我们创建本地项目皆可,当然如果你是多…

fs.1.10 ON CENTOS7 docker镜像制作

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs1.10版本的流程记录。 环境 docker engine:Version 24.0.6 centos docker:7 freeswitch:v1.10.7 手动模式 centos准备 docker hub拉取centos镜像。…

I/O(输入/输出流的概述)

文章目录 前言一、流的概述二、输入/输出流 1.字节/字符输入流2.字节/字符输出流总结 前言 在变量、数组和对象中储存的数据是暂时的,程序结束后它们就会丢失。如果想要永久地储存程序创建的数据,需要将其保存在磁盘文件中,这样就可以在程序中…

C# 快速将数据写入 Excel 单元格

目录 性能问题 Excel元素结构及写入原理 范例运行环境 配置Office DCOM 实现代码 组件库引入 核心代码 WriteArrayToExcel 神奇的 911 事件 小结 性能问题 将生成或查询到的数据,导出到 Excel 是应用中常用的一项功能。其中一些标准的写入单元格的方法如…

Java与Go:文件IO

在软件开发中,文件IO是一项基本任务,涉及到从文件读取数据、向文件写入数据以及处理文件相关的异常等操作。在这篇文章中,我们将专注于比较两种流行的编程语言:Java和Go,在文件IO方面的异同点。 文件的打开与关闭 文…

uniapp实现单选组件覆盖选中样式

uniapp实现单选组件覆盖选中样式 完整代码&#xff1a; <!-- 是否选择组件: trueOfFalseChooseBtn --> <template><view class"is-true-body"><view class"btn-con" :class"isTrue ? btn-con-active : " click"clic…

Prototype

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网. 题目&#xff1a; 样例&#xff1a; 输入 168 输出 42 思路&#xff1a; 根据题意&#xff0c; 吸收怪物是 w * n &#xff0c;其中 怪物 n 一定是质数&#xff0c;并且 AlexMercer 可以变成 w 的任一因子。 从中…

《安富莱嵌入式周报》第335期:大量嵌入式书籍免费下载,CNC电机同步,智能家居比赛作品,EMF2024电子胸牌,Swift语言单片机编程,UDS Boot

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV151421Q7P4/ 《安富莱嵌入式周报》第335期&#xff1a;大量嵌入…

Python数据分析师工资怎么样?

在大数据时代&#xff0c;提到数据分析&#xff0c;就不得不提到Python&#xff0c;作为一门编程语言&#xff0c;Python用于数据分析时&#xff0c;能够带来很多的优势&#xff0c;这也是Python数据分析师现在受到欢迎的原因。Python数据分析师受到欢迎&#xff0c;相应地能够…

稀碎从零算法笔记Day26-LeetCode:跳跃游戏

断更多天&#xff0c;懒狗ex 题型&#xff1a;数组、模拟、类似双指针&#xff1f; 链接&#xff1a;55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组…

【漏洞复现】MaxView系统dynamiccontent.properties接口处存在RCE漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

如何使用route-detect在Web应用程序路由中扫描身份认证和授权漏洞

关于route-detect route-detect是一款功能强大的Web应用程序路由安全扫描工具&#xff0c;该工具可以帮助广大研究人员在Web应用程序路由中轻松识别和检测身份认证漏洞和授权漏洞。 Web应用程序HTTP路由中的身份认证&#xff08;authn&#xff09;和授权&#xff08;authz&…

C语言_第一轮笔记_指针

8.1 密码开锁 地址和指针 一般以变量所在的内存单元的第一个字节的地址作为他的地址NULL的值为0&#xff0c;代表空指针 指针变量的定义 类型名 *指针变量名类型名指定指针变量所指向变量的类型指针声明符*在定义指针变量时被使用&#xff0c;说明被定义的那个变量是指针指针变…