oracle去掉表重複資料

2021-06-16 18:34:13 字數 1087 閱讀 5870

今天在做專案過程中,碰到資料庫表存在重覆記錄,顯示的時候需要去掉重複的資料。想了老半天,最終用rank() over (partition by 分組字段 order by 排序字段 順序)

解決了此問題。

一、首先介紹下rank() over (partition by 分組字段 order by 排序字段 順序):

語法:rank() over (order by 排序字段 順序)

rank() over (partition by 分組字段 order by 排序字段 順序)

1.順序:asc|desc  名次與業務相關:

2.分割槽字段:根據什麼字段進行分割槽。

問題:分割槽與分組有什麼區別?

•分割槽只是將原始資料進行名次排列(記錄數不變),

•分組是對原始資料進行聚合統計(記錄數變少,每組返回一條)。

注意:使用rank()over(order by 排序字段 順序)排序的時候,空值是最大的

(如果排序欄位為null,可能造成在排序時將null欄位排在最前面,影響排序的正確性。

所以建議將dense_rank()over(order by 列名 排序)改為dense_rank()over(order by 列名 排序 nulls last)

這樣只要排序欄位為null,就會放在最後,而不會影響排序結果)。

二、例子

首先建立一張test表,f分別有id,no兩個字段,這張表中的資料為:

id     no

1      11

2      22

3      22

4      33

5      55

需要將此表中no欄位中的22重複資料去掉一條,sql語句為:

select b.id,b.no from (

select rank() over(partition by t.no order by t.id) aa,t.* from test t) b

where b.aa=1

執行結果為:

id     no

1      11

2      22

4      33

5      55

Oracle清除表重複資料

一 清除資料需要的步驟 1複製原本的資料到另一表 此步需要對資料進行過濾,以去除重複資料 2將原表資料刪除 3將另一表資料插入原表 需要注意主鍵是否需要改變,如果需要改變,主鍵需要sys guid 來建立 清除user重複資料 複製表結構 create table user4copy as sele...

SQL語句去掉重複資料

有的時候會有部分字段重複,比如id值不一樣,但email一樣,需要刪除掉重複的資料,但相同資料只留一條的情況,如下 1.先查詢出重複的資料 select email from users u1 where rowid select max rowid from users u2 where u1.e...

sqlserver查詢去掉重複資料

說明 只要資料表 列名 資料相同,則說明是兩條重複的資料 id為資料表的主鍵自動增長 推薦使用方法一。方法一 select from 表名 a where not exists select 1 from 表名 where 列名 a.列名 and id 方法二 select a.from 表名 a ...