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

 更新时间:2024年05月05日 11:27:25   作者:慕城南风  
多个字段拼接去重是指将多个字段的值按照一定的规则进行拼接,并去除重复的拼接结果,本文主要介绍了MySQL中使用distinct单、多字段去重方法,感兴趣的可以了解一下

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

一、distinct

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

distinct【查询字段】,必须放在要查询字段的开头,即放在第一个参数;

只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;

DISTINCT 表示对后面的所有参数的拼接取不重复的记录,即查出的参数拼接每行记录都是唯一的

不能与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博客

到此这篇关于MySQL中使用distinct单、多字段去重方法的文章就介绍到这了,更多相关MySQL 字段去重内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql文件存储图文详解

    Mysql文件存储图文详解

    文件存储是我们日常开发中经常遇到的一个功能,下面这篇文章主要给大家介绍了关于Mysql文件存储的相关资料,需要的朋友可以参考下
    2021-06-06
  • 详细介绍windows下MySQL安装教程

    详细介绍windows下MySQL安装教程

    这篇文章主要给大家介绍的是windows下MySQL安装教程,其实好多公司,数据库的面试题都是不可避免的,甚至一些前端工程师面试的时候都避免不了被询问到和数据库有关的一些问题。下面就从最基础的安装教程开始,需要的朋友可以参考一下
    2021-11-11
  • MySQL启动时InnoDB引擎被禁用了的解决方法

    MySQL启动时InnoDB引擎被禁用了的解决方法

    最近在工作中遇到一个问题,现将解决的方法分享出来供大家参考学习,下面这篇文章主要给大家介绍了关于MySQL启动时InnoDB引擎被禁用了的解决方法,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • mysql和sqlserver查询数据库表的数量方法详解

    mysql和sqlserver查询数据库表的数量方法详解

    这篇文章主要介绍了mysql和sqlserver查询数据库表的数量方法详解,本文给大家分享SQL语句写法,文末补充介绍了查询sqlserver 数据库中各表条数的语句,需要的朋友可以参考下
    2023-07-07
  • MySQL插入不了中文数据问题的原因及解决

    MySQL插入不了中文数据问题的原因及解决

    最近发现新安装的MySQL数据库不能插入中文字段,所以下面这篇文章主要给大家介绍了关于MySQL插入不了中文数据问题的原因及解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Mysql查询优化之IN子查询优化方法详解

    Mysql查询优化之IN子查询优化方法详解

    项目中有需要,使用MySQL的in子查询,查询符合in子查询集合中条件的数据,但是没想到的是,MySQL的in子查询会如此的慢,让人无法接受,下面这篇文章主要给大家介绍了关于Mysql查询优化之IN子查询优化的相关资料,需要的朋友可以参考下
    2023-02-02
  • 如何使用MySQL查询某个列中相同值的数量统计

    如何使用MySQL查询某个列中相同值的数量统计

    这篇文章的主要内容是通过MySQL查询某个列中相同值的数量统计,文章简洁明了,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-07-07
  • mysql 字符集的系统变量说明

    mysql 字符集的系统变量说明

    mysql 字符集的系统变量的一些说明,大家在使用过程中,可以作个参考。
    2009-07-07
  • Mysql Binlog快速遍历搜索记录及binlog数据查看的方法

    Mysql Binlog快速遍历搜索记录及binlog数据查看的方法

    这篇文章主要介绍了Mysql Binlog快速遍历搜索记录及binlog数据查看的方法的相关资料,需要的朋友可以参考下
    2016-01-01
  • MYSQL 左连接右连接和内连接的详解及区别

    MYSQL 左连接右连接和内连接的详解及区别

    这篇文章主要介绍了MYSQL 左连接右连接和内连接的详解及区别的相关资料,需要的朋友可以参考下
    2016-11-11

最新评论