欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2024年05月05日 11:27:25   作者:慕城南風(fēng)  
多個字段拼接去重是指將多個字段的值按照一定的規(guī)則進(jìn)行拼接,并去除重復(fù)的拼接結(jié)果,本文主要介紹了MySQL中使用distinct單、多字段去重方法,感興趣的可以了解一下

多個字段拼接去重是指將多個字段的值按照一定的規(guī)則進(jìn)行拼接,并去除重復(fù)的拼接結(jié)果。這樣可以生成唯一標(biāo)識符或者進(jìn)行數(shù)據(jù)統(tǒng)計。

一、distinct

distinct用來查詢不重復(fù)記錄的條數(shù),即distinct來返回不重復(fù)字段的條數(shù)(count(distinct id)),其原因是distinct只能返回他的目標(biāo)字段,而無法返回其他字段
用法注意:

distinct【查詢字段】,必須放在要查詢字段的開頭,即放在第一個參數(shù);

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

DISTINCT 表示對后面的所有參數(shù)的拼接取不重復(fù)的記錄,即查出的參數(shù)拼接每行記錄都是唯一的

不能與all同時使用,默認(rèn)情況下,查詢時返回的就是所有的結(jié)果。

1.1 只對一個字段查重

對一個字段查重,表示選取該字段一列不重復(fù)的數(shù)據(jù)。

示例表:psur_list

PLAN_NUMBER字段去重,語句:

SELECT DISTINCT PLAN_NUMBER FROM psur_list;

1.2多個字段去重

對多個字段去重,表示選取多個字段拼接的一條記錄,不重復(fù)的所有記錄

PLAN_NUMBER和PRODUCT_NAME字段去重,語句:

SELECT DISTINCT PLAN_NUMBER,PRODUCT_NAME FROM psur_list;

期望結(jié)果:只對第一個參數(shù)PLAN_NUMBER取唯一值

解決辦法一:使用group_concat 函數(shù)

語句:

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值,返回結(jié)果包含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

二、聚合函數(shù)中使用distinct

在聚合函數(shù)中DISTINCT 一般跟 COUNT 結(jié)合使用。count()會過濾掉null項(xiàng)

SELECT DISTINCT COUNTRY FROM psur_list

語句:

SELECT COUNT(DISTINCT COUNTRY) FROM psur_list

結(jié)果如下:【實(shí)際包含null項(xiàng)有4個記錄,執(zhí)行語句后過濾null項(xiàng),計算為3】

例二:多字段

SELECT DISTINCT PRODUCT_NAME,COUNTRY FROM psur_list
//9條

語法:

SELECT COUNT(DISTINCT PRODUCT_NAME,COUNTRY) FROM psur_list

兩者都把null行過濾了,注意使用。

三、CONCAT_WS函數(shù)

創(chuàng)建測試表
首先,我們需要創(chuàng)建一個測試表來演示多個字段拼接去重的過程。假設(shè)我們有一個users表,包含以下字段:

id    name    age    gender
1    Alice    25    Female
2    Bob    30    Male
3    Alice    25    Female
4    Alice    30    Female

我們將使用這個表來進(jìn)行演示。

使用GROUP_CONCAT函數(shù)進(jìn)行拼接
MySQL提供了GROUP_CONCAT函數(shù),可以用來將一列的值進(jìn)行拼接。我們可以使用這個函數(shù)來實(shí)現(xiàn)多個字段的拼接。

下面的示例將演示如何將name和age字段進(jìn)行拼接,并去重:

SELECT GROUP_CONCAT(DISTINCT CONCAT(name, age) SEPARATOR ',')
FROM users;

運(yùn)行以上SQL語句,將會返回去重后的拼接結(jié)果:

Alice25,Alice30,Bob30

使用CONCAT_WS函數(shù)進(jìn)行拼接除了GROUP_CONCAT函數(shù),MySQL還提供了CONCAT_WS函數(shù),它可以將多個字段的值進(jìn)行拼接,并使用指定的分隔符進(jìn)行分隔。

下面的示例將演示如何將name和age字段進(jìn)行拼接,并使用逗號作為分隔符:

SELECT CONCAT_WS(',', name, age)
FROM users
GROUP BY name, age;

運(yùn)行以上SQL語句,將會返回拼接后的結(jié)果:

Alice,25
Alice,30
Bob,30

去除重復(fù)的拼接結(jié)果在上述示例中,我們可以看到,使用GROUP_CONCAT或者CONCAT_WS函數(shù)可以將多個字段進(jìn)行拼接,但是它們并不能去除重復(fù)的拼接結(jié)果。如果我們需要去除重復(fù)的拼接結(jié)果,可以使用子查詢和DISTINCT關(guān)鍵字來實(shí)現(xiàn)。

下面的示例演示了如何使用子查詢和DISTINCT關(guān)鍵字來去除重復(fù)的拼接結(jié)果:???????

SELECT DISTINCT CONCAT_WS(',', name, age)
FROM (
    SELECT name, age
    FROM users
    GROUP BY name, age
) AS subquery;

運(yùn)行以上SQL語句,將會返回去重后的拼接結(jié)果:???????

Alice,25
Alice,30
Bob,30

參考文章:

【sql】MySQL中使用distinct單、多字段去重方法_mysql distinct 多個字段-CSDN博客

mysql GROUP_CONCAT函數(shù)詳解-CSDN博客

mysql 多個字段拼接去重(GROUP_CONCAT)_mysql group_concat 去重-CSDN博客

到此這篇關(guān)于MySQL中使用distinct單、多字段去重方法的文章就介紹到這了,更多相關(guān)MySQL 字段去重內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論