詳解mysql數據去重的三種方式

一、背景

最近在和系統模塊做數據聯調,其中有一個需求是將兩個角色下的相關數據​對比後將最新的數據返回出去,於是就想到瞭去重,再次做一個總結。

二、數據去重三種方法使用

1.​通過MySQL DISTINCT:去重(過濾重復數據)

​ 1.1.在使用 mysql SELECT 語句查詢數據的時候返回的是所有匹配的行。

SELECT t.age FROM t_user t

可以看到查詢結果返回瞭 10 條記錄,其中有一些重復的 age 值,有時出於對數據分析的要求,需要消除重復的記錄值。

1.2.DISTINCT 關鍵字指示 MySQL 消除重復的記錄值。

語法格式為:

SELECT DISTINCT <字段名> FROM <表名>;

SELECT DISTINCT t.age FROM t_user t

 由運行結果可以看到,這次查詢結果隻返回瞭 5 條記錄的 age 值,且沒有重復的值。

ps:

其中,“字段名”為需要消除重復記錄的字段名稱,多個字段時用逗號隔開。

使用 DISTINCT 關鍵字時需要註意以下幾點:

DISTINCT 關鍵字隻能在 SELECT 語句中使用。

在對一個或多個字段去重時,DISTINCT 關鍵字必須在所有字段的最前面。

如果 DISTINCT 關鍵字後有多個字段,則會對多個字段進行組合去重,也就是說,隻有多個字段組合起來完全是一樣的情況下才會被去重。

2.group by

SELECT t.age FROM t_user t GROUP BY t.age;

3.row_number窗口函數

 語法格式為:

row_number() over (partition by <用於分組的字段名> order by <用於組內排序的字段名>)

項目使用的去重:​

select * from (select t.*,row_number() over(partition by t.children_id  order by t.update_time DESC) rn       
from mdm_data_authority_view_info t where t.DATA_CLASS_ID = '分類id' AND t.DATA_ROLE_ID 
IN ( '角色id', '角色id' ))              
where rn = 1;  

三、總結

到此這篇關於詳解mysql數據去重的三種方式的文章就介紹到這瞭,更多相關mysql數據去重內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: