亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    歸納整理oracle數(shù)據(jù)庫去除重復(fù)數(shù)據(jù)常用的方法

    本篇文章給大家?guī)砹岁P(guān)于Oracle的相關(guān)知識,其中主要介紹了關(guān)于數(shù)據(jù)清理的時(shí)候常常會清除表中的重復(fù)的數(shù)據(jù),那么在oracle中怎么處理呢?下面一起來看一下,希望對大家有幫助。

    歸納整理oracle數(shù)據(jù)庫去除重復(fù)數(shù)據(jù)常用的方法

    推薦教程:《Oracle視頻教程》

    創(chuàng)建測試數(shù)據(jù)

    create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10)); insert into nayi224_180824 select 1, 2, 3 from dual union all select 1, 2, 3 from dual union all select 5, 2, 3 from dual union all select 10, 20, 30 from dual ; commit; select*from nayi224_180824;
    COL_1 COL_2 COL_3
    1 2 3
    1 2 3
    5 2 3
    10 20 30

    針對指定列,查出去重后的結(jié)果集

    distinct

    select distinct t1.* from nayi224_180824 t1;
    COL_1 COL_2 COL_3
    10 20 30
    1 2 3
    5 2 3

    方法局限性很大,因?yàn)樗荒軐θ坎樵兊牧凶鋈ブ亍H绻蚁雽ol_2,col3去重,那我的結(jié)果集中就只能有col_2,col_3列,而不能有col_1列。

    select distinct t1.col_2, col_3 from nayi224_180824 t1
    COL_2 COL_3
    2 3
    20 30

    不過它也是最簡單易懂的寫法。

    row_number()

    select *   from (select t1.*,                row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn           from nayi224_180824 t1) t1  where t1.rn = 1 ;
    COL_1 COL_2 COL_3 RN
    1 2 3 1
    10 20 30 1

    寫法上要麻煩不少,但是有更大的靈活性。

    針對指定列,查出所有重復(fù)的行

    count having

    select *   from nayi224_180824 t  where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3                                 from nayi224_180824 t1                                group by t1.col_2, t1.col_3                               having count(1) > 1)
    COL_1 COL_2 COL_3
    1 2 3
    1 2 3
    5 2 3

    要查兩次表,效率會比較低。不推薦。

    count over

    select *   from (select t1.*,                count(1) over(partition by t1.col_2, t1.col_3) rn           from nayi224_180824 t1) t1  where t1.rn > 1 ;
    COL_1 COL_2 COL_3 RN
    1 2 3 3
    1 2 3 3
    5 2 3 3

    只需要查一次表,推薦。

    刪除所有重復(fù)的行

    delete from nayi224_180824 t  where t.rowid in (                    select rid                      from (select t1.rowid rid,                                    count(1) over(partition by t1.col_2, t1.col_3) rn                               from nayi224_180824 t1) t1                     where t1.rn > 1);

    就是上面的語句稍作修改。

    刪除重復(fù)數(shù)據(jù)并保留一條

    分析函數(shù)法

    delete from nayi224_180824 t  where t.rowid in (select rid                      from (select t1.rowid rid,                                   row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn                              from nayi224_180824 t1) t1                     where t1.rn > 1);

    擁有分析函數(shù)一貫的靈活性高的特點(diǎn)??梢詾樗麨榈姆纸M,并通過改變orderby從句來達(dá)到像”保留最大id“這樣的要求。

    group by

    delete from nayi224_180824 t  where t.rowid not in        (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);

    犧牲了一部分靈活性,換來了更高的效率。

    推薦教程:《Oracle視頻教程》

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號