MySQL中使用distinct單、多字段去重方法
多個(gè)字段拼接去重是指將多個(gè)字段的值按照一定的規(guī)則進(jìn)行拼接,并去除重復(fù)的拼接結(jié)果。這樣可以生成唯一標(biāo)識(shí)符或者進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。
一、distinct
distinct用來(lái)查詢不重復(fù)記錄的條數(shù),即distinct來(lái)返回不重復(fù)字段的條數(shù)(count(distinct id)),其原因是distinct只能返回他的目標(biāo)字段,而無(wú)法返回其他字段
用法注意:
distinct【查詢字段】,必須放在要查詢字段的開(kāi)頭,即放在第一個(gè)參數(shù);
只能在SELECT 語(yǔ)句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
DISTINCT 表示對(duì)后面的所有參數(shù)的拼接取不重復(fù)的記錄,即查出的參數(shù)拼接每行記錄都是唯一的
不能與all同時(shí)使用,默認(rèn)情況下,查詢時(shí)返回的就是所有的結(jié)果。
1.1 只對(duì)一個(gè)字段查重
對(duì)一個(gè)字段查重,表示選取該字段一列不重復(fù)的數(shù)據(jù)。
示例表:psur_list

PLAN_NUMBER字段去重,語(yǔ)句:
SELECT DISTINCT PLAN_NUMBER FROM psur_list;

1.2多個(gè)字段去重
對(duì)多個(gè)字段去重,表示選取多個(gè)字段拼接的一條記錄,不重復(fù)的所有記錄
PLAN_NUMBER和PRODUCT_NAME字段去重,語(yǔ)句:
SELECT DISTINCT PLAN_NUMBER,PRODUCT_NAME FROM psur_list;

期望結(jié)果:只對(duì)第一個(gè)參數(shù)PLAN_NUMBER取唯一值
解決辦法一:使用group_concat 函數(shù)
語(yǔ)句:
SELECT GROUP_CONCAT(DISTINCT PLAN_NUMBER) AS PLAN_NUMBER,PRODUCT_NAME from psur_list GROUP BY PLAN_NUMBER

解決辦法二:使用group by語(yǔ)句:
SELECT PLAN_NUMBER,PRODUCT_NAME FROM psur_list GROUP BY PLAN_NUMBER

1.3針對(duì)null處理
distinct不會(huì)過(guò)濾掉null值,返回結(jié)果包含null值
表psur_list如下:

對(duì)COUNTRY單字段去重,語(yǔ)句:
SELECT DISTINCT COUNTRY FROM psur_list

對(duì)COUNTRY多字段去重,語(yǔ)句:
SELECT DISTINCT PRODUCT_NAME,COUNTRY FROM psur_list

1.4與distinctrow同義
語(yǔ)句:
SELECT DISTINCTROW COUNTRY FROM psur_list

二、聚合函數(shù)中使用distinct
在聚合函數(shù)中DISTINCT 一般跟 COUNT 結(jié)合使用。count()會(huì)過(guò)濾掉null項(xiàng)
SELECT DISTINCT COUNTRY FROM psur_list

語(yǔ)句:
SELECT COUNT(DISTINCT COUNTRY) FROM psur_list
結(jié)果如下:【實(shí)際包含null項(xiàng)有4個(gè)記錄,執(zhí)行語(yǔ)句后過(guò)濾null項(xiàng),計(jì)算為3】

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

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

兩者都把null行過(guò)濾了,注意使用。
三、CONCAT_WS函數(shù)
創(chuàng)建測(cè)試表
首先,我們需要?jiǎng)?chuàng)建一個(gè)測(cè)試表來(lái)演示多個(gè)字段拼接去重的過(guò)程。假設(shè)我們有一個(gè)users表,包含以下字段:
id name age gender 1 Alice 25 Female 2 Bob 30 Male 3 Alice 25 Female 4 Alice 30 Female
我們將使用這個(gè)表來(lái)進(jìn)行演示。
使用GROUP_CONCAT函數(shù)進(jìn)行拼接
MySQL提供了GROUP_CONCAT函數(shù),可以用來(lái)將一列的值進(jìn)行拼接。我們可以使用這個(gè)函數(shù)來(lái)實(shí)現(xiàn)多個(gè)字段的拼接。
下面的示例將演示如何將name和age字段進(jìn)行拼接,并去重:
SELECT GROUP_CONCAT(DISTINCT CONCAT(name, age) SEPARATOR ',') FROM users;
運(yùn)行以上SQL語(yǔ)句,將會(huì)返回去重后的拼接結(jié)果:
Alice25,Alice30,Bob30
使用CONCAT_WS函數(shù)進(jìn)行拼接除了GROUP_CONCAT函數(shù),MySQL還提供了CONCAT_WS函數(shù),它可以將多個(gè)字段的值進(jìn)行拼接,并使用指定的分隔符進(jìn)行分隔。
下面的示例將演示如何將name和age字段進(jìn)行拼接,并使用逗號(hào)作為分隔符:
SELECT CONCAT_WS(',', name, age)
FROM users
GROUP BY name, age;運(yùn)行以上SQL語(yǔ)句,將會(huì)返回拼接后的結(jié)果:
Alice,25
Alice,30
Bob,30
去除重復(fù)的拼接結(jié)果在上述示例中,我們可以看到,使用GROUP_CONCAT或者CONCAT_WS函數(shù)可以將多個(gè)字段進(jìn)行拼接,但是它們并不能去除重復(fù)的拼接結(jié)果。如果我們需要去除重復(fù)的拼接結(jié)果,可以使用子查詢和DISTINCT關(guān)鍵字來(lái)實(shí)現(xiàn)。
下面的示例演示了如何使用子查詢和DISTINCT關(guān)鍵字來(lái)去除重復(fù)的拼接結(jié)果:???????
SELECT DISTINCT CONCAT_WS(',', name, age)
FROM (
SELECT name, age
FROM users
GROUP BY name, age
) AS subquery;運(yùn)行以上SQL語(yǔ)句,將會(huì)返回去重后的拼接結(jié)果:???????
Alice,25
Alice,30
Bob,30
參考文章:
【sql】MySQL中使用distinct單、多字段去重方法_mysql distinct 多個(gè)字段-CSDN博客
mysql GROUP_CONCAT函數(shù)詳解-CSDN博客
mysql 多個(gè)字段拼接去重(GROUP_CONCAT)_mysql group_concat 去重-CSDN博客
到此這篇關(guān)于MySQL中使用distinct單、多字段去重方法的文章就介紹到這了,更多相關(guān)MySQL 字段去重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL中數(shù)據(jù)去重的兩種方式詳解(DISTINCT和GROUP BY)
- 詳解MySQL中DISTINCT去重的核心注意事項(xiàng)
- mysql distinct去重,IFNULL空值處理方式
- MySQL中distinct和group by去重的區(qū)別解析
- MySQL中distinct和group?by去重效率區(qū)別淺析
- MySQL去重中distinct和group?by的區(qū)別淺析
- MySQL中使用去重distinct方法的示例詳解
- MySQL去重該使用distinct還是group by?
- Mysql中distinct與group by的去重方面的區(qū)別
- MySQL DISTINCT 去重的幾種方法使用
相關(guān)文章
mysql 添加用戶并分配select權(quán)限的實(shí)現(xiàn)
在開(kāi)發(fā)MySQL應(yīng)用程序時(shí),為了保證數(shù)據(jù)的安全性和準(zhǔn)確性,通常需要設(shè)置不同級(jí)別的用戶權(quán)限,本文主要介紹了mysql 添加用戶并分配select權(quán)限的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01
MYSQL事務(wù)教程之Yii2.0商戶提現(xiàn)功能
這篇文章主要給大家介紹了關(guān)于MYSQL事務(wù)教程之Yii2.0商戶提現(xiàn)功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
詳解MySQL中存儲(chǔ)函數(shù)創(chuàng)建與觸發(fā)器設(shè)置
這篇文章主要為大家詳細(xì)介紹了MySQL中存儲(chǔ)函數(shù)的創(chuàng)建與觸發(fā)器的設(shè)置,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下2022-08-08
MySQL8.0本地服務(wù)器連接不上的問(wèn)題解決
一個(gè)內(nèi)網(wǎng)內(nèi)連接mysql會(huì)出現(xiàn)提示Host xxx is not allowed to connect to this MySQL server,本文主要介紹了MySQL8.0本地服務(wù)器連接不上的問(wèn)題解決,感興趣的可以了解一下2024-01-01
Mysql數(shù)據(jù)庫(kù)索引面試題(程序員基礎(chǔ)技能)
索引是Mysql的一塊硬骨頭,但是對(duì)于程序猿來(lái)說(shuō)又是十分重要的基礎(chǔ)技能。本文將從索引原理、索引設(shè)計(jì)原則方面闡述Mysql索引,相信通過(guò)本文的學(xué)習(xí)你將完美征服阿里面試官2021-05-05
關(guān)于MYSQL 你需要知道的數(shù)據(jù)類型和操作數(shù)據(jù)表
這篇文章主要介紹了關(guān)于MYSQL中數(shù)據(jù)類型的知識(shí)和操作數(shù)據(jù)表的方法,文中講解非常詳細(xì)供大家參考學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
MySQL報(bào)錯(cuò)Expression #1 of SELECT list 
這篇文章主要介紹了MySQL報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-09-09

