今天在做專案過程中,碰到資料庫表存在重覆記錄,顯示的時候需要去掉重複的資料。想了老半天,最終用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 ...