SQL中的三種去重方式:DISTINCT,GROUP BY與ROW_NUMBER()
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
今天介紹三種去重方式。 1.使用DISTINCT關(guān)鍵字這是SQL中最常用的去重方式。DISTINCT 關(guān)鍵字用于返回唯一不同的值。在一個(gè)SELECT語句中,你可以使用 DISTINCT 關(guān)鍵字。例如: SELECT DISTINCT column_name FROM table_name; 這條語句會(huì)返回table_name中所有不同的column_name值。 2.使用GROUP BY語句GROUP BY語句用于結(jié)合聚合函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。在GROUP BY查詢中,如果對(duì)所有列都進(jìn)行分組,那么它的結(jié)果就等同于使用了DISTINCT關(guān)鍵字。例如:
這個(gè)查詢會(huì)返回table_name中所有不同的column_name值。 3.使用 ROW_NUMBER() 函數(shù)ROW_NUMBER() 是一個(gè)窗口函數(shù),為每個(gè)分組中的每行分配唯一的行號(hào),它可以用來刪除重復(fù)行。例如:
這個(gè)查詢將返回table_name中所有不同的column_name值。 在此查詢中,使用 ROW_NUMBER() OVER(PARTITION BY column_name ORDER BY (SELECT 0)) 可以為每個(gè) column_name 分組中的每一行分配一個(gè)唯一的行號(hào),但這個(gè)行號(hào)的分配并不依賴于任何特定的排序。這樣,你可以選擇每個(gè) column_name 分組中的任意一行,因此 WHERE RN = 1 可以選擇每個(gè)分組的第一行。 如果你不關(guān)心選擇哪一行,或者如果表中的所有行對(duì)于每個(gè) column_name 都是唯一的,那么這樣做是可以的。如果你希望基于某種特定的排序來選擇行(例如,選擇每個(gè)分組中最新或最舊的行),那么你需要使用一個(gè)真正的排序表達(dá)式,而不是 SELECT 0。 比如說,表table_name中有兩列,一列是column_name,一列是create_time,因?yàn)槊總€(gè)column_name下可能有重復(fù)數(shù)據(jù),且create_time可能不一樣,我們?nèi)ブ氐囊?guī)則是取最近一條column_name的數(shù)據(jù),那么去重的SQL如下,將(SELECT 0) 替換成create_time desc:
簡(jiǎn)單總結(jié)下今天分享的內(nèi)容。 今天主要分享了SQL中的3種去重方式:使用 DISTINCT 關(guān)鍵字,GROUP BY語句,和 ROW_NUMBER() 函數(shù)。 在實(shí)際使用時(shí),可以根據(jù)具體的需求和數(shù)據(jù)情況選擇合適的方法。希望本文對(duì)您有所幫助。 該文章在 2024/2/19 15:16:16 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |