MySQL中使用distinct單、多字段去重方法
多個字段拼接去重是指將多個字段的值按照一定的規(guī)則進行拼接,并去除重復的拼接結果。這樣可以生成唯一標識符或者進行數據統(tǒng)計。
一、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個記錄,執(zhí)行語句后過濾null項,計算為3】

例二:多字段
SELECT DISTINCT PRODUCT_NAME,COUNTRY FROM psur_list //9條

語法:
SELECT COUNT(DISTINCT PRODUCT_NAME,COUNTRY) FROM psur_list

兩者都把null行過濾了,注意使用。
三、CONCAT_WS函數
創(chuàng)建測試表
首先,我們需要創(chuàng)建一個測試表來演示多個字段拼接去重的過程。假設我們有一個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)_mysql group_concat 去重-CSDN博客
到此這篇關于MySQL中使用distinct單、多字段去重方法的文章就介紹到這了,更多相關MySQL 字段去重內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL利用索引優(yōu)化ORDER BY排序語句的方法
這篇文章主要介紹了MySQL利用索引優(yōu)化ORDER BY排序語句的方法,幫助大家更好的理解和使用MySQL數據庫,感興趣的朋友可以了解下2020-10-10
percona-toolkit之pt-kill 殺掉mysql查詢或連接的方法
本文主要描述了percona-toolkit中pt-kill的 使用實例 ,及 一些重要參數的介紹,需要的朋友可以參考下2016-04-04
mysql5.7及mysql 8.0版本修改root密碼的方法小結
這篇文章主要介紹了mysql5.7及mysql 8.0版本修改root密碼方式 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11
Win 8或以上系統(tǒng)下MySQL最新版5.7.17(64bit ZIP綠色版)安裝部署教程
這篇文章主要為大家詳細介紹了Win 8或以上系統(tǒng)下MySQL最新版5.7.17 64bit ZIP綠色版安裝部署教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05

