MySQL中使用distinct单、多字段去重方法 |
多个字段拼接去重是指将多个字段的值按照一定的规则进行拼接,并去除重复的拼接结果 。这样可以生成唯一标识符或者进行数据统计 。 一、distinctdistinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段
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函数创建测试表 id name age gender 1 Alice 25 Female 2 Bob 30 Male 3 Alice 25 Female 4 Alice 30 Female 我们将使用这个表来进行演示 。 使用GROUP_CONCAT函数进行拼接 下面的示例将演示如何将name和age字段进行拼接,并去重: SELECT GROUP_CONCAT(DISTINCT CONCAT(name, age) SEPARATOR ',') FROM users; 运行以上SQL语句,将会返回去重后的拼接结果:
使用CONCAT_WS函数进行拼接除了GROUP_CONCAT函数,MySQL还提供了CONCAT_WS函数,它可以将多个字段的值进行拼接,并使用指定的分隔符进行分隔 。 下面的示例将演示如何将name和age字段进行拼接,并使用逗号作为分隔符: SELECT CONCAT_WS(',', name, age) FROM users GROUP BY name, age; 运行以上SQL语句,将会返回拼接后的结果:
去除重复的拼接结果在上述示例中,我们可以看到,使用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语句,将会返回去重后的拼接结果:???????
参考文章: 【sql】MySQL中使用distinct单、多字段去重方法_mysql distinct 多个字段-CSDN博客 mysql GROUP_CONCAT函数详解-CSDN博客 mysql 多个字段拼接去重(GROUP_CONCAT)_mysql group_concat 去重-CSDN博客 到此这篇关于MySQL中使用distinct单、多字段去重方法的文章就介绍到这了,更多相关MySQL 字段去重内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |